m_shige1979のときどきITブログ

プログラムの勉強をしながら学習したことや経験したことをぼそぼそと書いていきます

Github(変なおっさんの顔でるので気をつけてね)

https://github.com/mshige1979

swiftの学習(配列と連想配列)

なんか空の配列を定義したらappendが使えなかった

空の配列の場合は追加するためには型を指定する必要がある用です

Arrayの中にDictonaryを入れる場合は?

サンプル
import Foundation

var items = [NSDictionary]()

items.append([
    "name": "りんご",
    "detail": "赤い果物でおいしい",
    "hoge": [
        "aaa": "111"
    ]
])

items.append([
    "name": "ばなな",
    "detail": "黄色い皮で剥くと甘い",
    "hoge": [
        "aaa": "222"
    ]
])

items.append([
    "name": "みかん",
    "detail": "酸味が効いてておいしい",
    "hoge": [
        "aaa": "333"
    ]
])

println(items.count)

for(_val) in items {
    var _name: AnyObject? = _val["name"]?
    var _detail: AnyObject? = _val["detail"]?
    println("name = \(_name), detail = \(_detail)")
}
結果
3
name = Optional(りんご), detail = Optional(赤い果物でおいしい)
name = Optional(ばなな), detail = Optional(黄色い皮で剥くと甘い)
name = Optional(みかん), detail = Optional(酸味が効いてておいしい)

Dictonaryの場合は型を指定しないとoptionalになって意味がわかりにくくなるようです

多次元配列バージョン?

サンプル
import Foundation

var items = [NSArray]()

items.append(["aaa", "bbb", "ccc"])
items.append(["ddd", "eee", "fff"])
items.append(["111", "222", "333"])

println(items.count)

for(_val) in items {
    var _data1: AnyObject? = _val[0]
    var _data2: AnyObject? = _val[1]
    var _data3: AnyObject? = _val[2]
    println("1 = \(_data1), 2 = \(_data2), 3 = \(_data3)")
}
結果
3
1 = Optional(aaa), 2 = Optional(bbb), 3 = Optional(ccc)
1 = Optional(ddd), 2 = Optional(eee), 3 = Optional(fff)
1 = Optional(111), 2 = Optional(222), 3 = Optional(333)

まとめ

初期化しただけでは追加できないので追加する値が決まっている場合は型を指定すること
初期化の時点で値を設定する場合は問題ないけど最初は空から始まるだろうし…

連想配列のキーを指定する場合はダブルクォーテーションで挟まないと取得できないおそれあり
他の言語ではシングルクォーテーションでも可能な場合があるので気をつけること