SwiftのDictionaryを使ってみた。
よくあるHashmap的なやつね。
宣言はこんな具合
// 空Dictionaryの宣言
var emptydictionaly = Dictionary<String,Int>()
// Dictionalyの宣言
// ※型は省略可能です
var populationDict:Dictionary<String,Int> = [
"kanazawa":10,
"komatsu":100000,
"nanao":50000
]
保存している値へのアクセス方法
// 値の取得
// Dictionalyから値を求めるとoptionalな値が帰ってくる
let kanazawaOpt = populationDict["kanazawa"]
NSLog("kanazawa population:%d",kanazawaOpt!)
// 値の追加
populationDict["kaga"] = 60000
populationDict.updateValue(38000,forKey:"suzu")
// 値の上書き
// こんな素直な書き方も可能だけど
populationDict["kanazawa"] = 1000000
// updateValueを使うと変更前の値をOptionalで取得できる
if let oldvalue = populationDict.updateValue(460000,forKey:"kanazawa") {
NSLog("old kanazawa population:%d",oldvalue)
}
// 要素の削除
// nilを入れることで要素が削除される
populationDict["nanao"] = nil
// removeValueForKeyを使うと削除と同時に古い値を取得できる
if let oldvalue = populationDict.removeValueForKey("komatsu") {
NSLog("old komatsu population:%d",oldvalue)
}
// ちなみにletでDictionalyを宣言すると要素を変更することができない
// ※arrayではletでも上書きできちゃう。。
let immutableDict = ["A":1]
// ↓でエラーとなる
//immutableDict["A"] = 2
要素の列挙、ループ処理
var totalPopulataion = 0
// for-each的なループ
// キーと値を一緒に取得
for (city,population) in populationDict {
totalPopulataion += population
}
NSLog("合計:\(totalPopulataion)")
// キーのみを求めてループ
for city in populationDict.keys {
NSLog("city:\(city)")
}
Dictionalyは構造体(Structure)なので値型!
なので下記では複写元と複写先では違う値が取得される
// 参照を別の変数に代入して値を書き換える
populationDict["kanazawa"] = 460000
var copiedDict = populationDict
copiedDict["kanazawa"] = 90000
// でも元の値は書き換わっていない
NSLog("populationDict:%d copiedDict:%d",populationDict["kanazawa"]!,copiedDict["kanazawa"]!)
// ・・・ populationDict:460000
// copiedDict :90000
ピンバック: SwiftのDictionaryでfor-eachループ | Hack