Swift:配列で泣き

この一年、わからないことはそれなりに調べているのですが、いい加減になっていることも多いです。

それではまずい事態のようなので、今、やっと真剣に配列について勉強し直しました。サンプルプログラムはあとからアップします。スタディ結果、これから先は、NSMutableArrayを使おうと考えています。

var wDicString:[String]=[] 

  • wDicString[0]=wString 文字列を[wString]のようにカギ括弧でくくらない
  • wDicString[0]=nil  nilは入れられない。空の文字“”ならOK
  • wDicString.append(1234)はダメ。数値(例:Int)は直接入れられない
  • wDicString[2] インデックスで抽出できる。インデックスは実在の範囲内であること。
  • wDicString[1]=wString  既存ならインデックスで置換可能
  • wDicString[999]=wString 実在しないと実行時にエラーになる。
  • wDicString.insert(wString, atIndex: 1) atIndexの前に挿入。実在しないとエラー。
  • wDicString.removeAtIndex(1) atIndexの行を削除。実在しないとエラー。
  • wDicString=[aa, 012345, bb, 1234]のような配列は作れない。
  • (追記) 範囲指定で削除することが可能。削除する開始行位置と終了位置を指定する。次の場合、3番目が削除される。wString[3…4] = []だと3行目から5行目の3行が削除され、removeRangeの終了行と意味が異なるので注意。
    例: wString.removeRange(Range (start: 3,end: 4))

var wDicArray1:[NSArray]=[]

  • wDicArray1.append([wString]) 鉤括弧でくくって[文字列]や[数値]を入れることができる。
  • あとは、var wDicString:[String]=[]と同じ。
  • [ ]の中にどの型を定義するかに処理は依存。
  • 配列の中の配列になるので、 wDicArray1[1][2]のよう書いて取り出す。

2次元配列
var wString:[NSArray] = []

wString.append([0, 1, 2, 3, 4, 5])
wString.append([10, 11, 12, 13, 14, 15])
println(__LINE__,”wString[1]=\(wString[1][1])です”)

var wMutableArray:NSMutableArray=[] 

  • 一次元[aa]、二次元[aa1,aa2]、三次元[[aa11, aa12],[aa21, aa22],[aa31, aa32]]の配列が可能。
  • 文字列、数値を直接入れるこもできる。
  • 鉤括弧でくくって配列(例:[“aa”, “bb”]として入れることもできる。
  • 二次元以上の配列の展開例

2次元配列
var wString3:NSMutableArray = []
wString3[0] = [0, 1, 2, 3, 4, 5]
wString3[1] = [10, 11, 12, 13, 14, 15]
println(__LINE__,”取り出し方は、wString3[0]=\(wString3[0])です。”)
println(__LINE__,”取り出し方は、wString3[1][1]=\(wString3[1][1])です。”)

3次元配列
var wString4:NSMutableArray = []

wString4[0] = [[0,   1,  2],  [3,  4,  5],  [6,  7,  8]]
wString4[1] = [[10, 11, 12], [13, 14, 15], [16, 17, 18]]
wString4[2] = [[20, 21, 22], [23, 24, 25], [26, 27, 28]]
println(__LINE__,”取り出し方は、wString3[0]=\(wString4[0])です。”)
println(__LINE__,”取り出し方は、wString3[1][1]=\(wString4[2][1][0])です。”)
println(__LINE__,”配列の個数の調べ方は、wString4[2][1].count=\(wString4[2][1].count)です。”)

NSMutableArrayに関する注意点

  •  wMutableArray.count 配列個数を調べるときは、.countを使う。
  • 検索・削除: 指定した値をNSRangeで範囲指定して検索して削除する
    wMutableArray.removeObject(wString,inRange:NSRange(location: 1, length: wMutableArray.count – 1)))
  • 削除: NSRangeで指示した削除開始位置から指定行数分を削除する。
    wMutableArray.removeObjectsInRange(NSRange(location:wStart, length: wLines)))
  • 削除: 指定した行を削除する。
    wMutableArray.removeObjectAtIndex(1)
Advertisements