Day: April 30, 2016

Swift:多次元配列の更新と添字

多次元配列の更新の仕方。

Xcodeアップデート前まではwArray[1][3]のように書けました。しかし、これが使えなくなったので、どのように表現すればいいのか、ずーっと考えていました。

どうしても必要になったので、今朝、徹底的に調べたら、やり方が部分的にわかりました。要は、多次元配列の更新の問題。ただし、解決未了。

追記:ウォーキングしながら考えた結果、この方法だと[aaa, bbb, [[[a1], [b1], [c1]], [bbb],[ccc]]]となり、ネストが深い。各配列を展開・設定するとパフォーマンスが犠牲になる可能性が高い。配列の設計をし直す。方針変更。と言っても、マイナーな変更。

サンプルプログラム

var wkeyArray:NSMutableArray = []
for inx in 0 ..< 2 {
      wkeyArray.addObject([  [inx], [], [“aaa”] ])
}
let rRow:Int = 1
let rRow2nd:Int = 2
print(#line, rRow, rRow2nd, wkeyArray)

let wtempRow:NSMutableArray = NSMutableArray(array:(wkeyArray[rRow] as! NSArray))
print(#line,”—>”, wtempRow)
let wtempColumn:NSMutableArray = NSMutableArray(array:(wtempRow[rRow2nd] as! NSArray))
print(#line,”—>”, wtempColumn)

wtempColumn.addObject([“123”, “45”, “678”])
print(#line,”—>”, wtempColumn)

wtempRow[rRow2nd] = [wtempColumn]
print(#line,”—>”, wtempRow)

wkeyArray[rRow] = [wtempRow[rRow2nd]]
print(#line, rRow, rRow2nd, wkeyArray)

多次元配列の更新 (この先は少し怪しい? 現在、再確認中)

15行x10列の配列の5行目の3列目に[123,”abc”]を入れる例です。

var wkeyArray:NSMutableArray = []

for _ in 0 ..< 15 { //初期設定
wkeyArray.addObject([  [], [], [], [], [], [], [], [], [], [] ])
}

(NSMutableArray(array:(wkeyArray[5] as! NSArray)[3] as! NSArray)).addObject([[123,”abc”]])//5行目の3列目

  • 添字を使う場合、配列をNSArrayでキャストする必要があります。
  • これをNSMutableArrayに変えると、エラーが発生します。
  • NSArrayからNSMutableArrayに変換するときは、NSMutalbeArray(array:   )を使います。

調べているとき、単純な配列ならmapが使えることを知りました。