The Swift Programming LanguageのLanguage Guideの"Collection Types"よりDictionaryをざっとまとめたものです。
Objective-Cを始め、既に他の言語を習得されてる方向けです。
前章 Collection Array
次章 Control Flow
辞書
ハッシュテーブル。
そのため値は順序を持たない。
NSDictionaryとは異なり、指定した型のみを格納できる。(C++のテンプレート的)
Dictionary
キーについて
KeyTypeは、ハッシュ可能(hashable)の必要がある。
辞書リテラル
[key1: value1, key2: value2, key3: value3]
var airports: Dictionary<String,String> = ["TYO": "Tokyo", "DUB":"Dublin"]
// これもOK
var airports2 = ["TYO": "Tokyo", "DUB":"Dublin"]
var key1 = "TYO"
var key2 = "DUB"
// これもOK
var airports3 = [key1: "Tokyo", key2:"Dublin"]
アクセスと変更
個数
var airports = ["TYO": "Tokyo", "DUB":"Dublin"]
airports.count // 2
追加、変更
var airports = ["TYO": "Tokyo", "DUB":"Dublin"]
// 追加
airports["LHR"] = "London"
// 変更
airports["LHR"] = "London Heathrow"
// 変更して古いキーも取得
if let oldValue = airports.updateValue("London", forKey: "LHR") {
println("old=\(oldValue)")
}
参照
キーに対応する値が存在しない場合は、nilを返す。(この場合、nameはString?型)
optional(nil許容)参照
var airports = ["TYO": "Tokyo", "DUB":"Dublin"]
if let name = airports["TYO"] {
// キー"TYO"に対応する値が見つかった場合の処理
} else {
// 値が見つからなかった場合の処理
}
削除
値にnilを設定するか、removeValueForKeyで削除できる。
var airports = ["TYO": "Tokyo", "DUB":"Dublin"]
airports["TYO"] = nil
if let removedValue = airports.removeValueForKey("DUB") {
}
探索
KeyとValueのペア
var airports = ["TYO": "Tokyo", "DUB":"Dublin"]
for (code, name) in airports {
println("\(code)=\(name)")
}
キー配列を取得
ただし順序は保証されない。
var airports = ["TYO": "Tokyo", "DUB":"Dublin"]
airports.keys // ["TYO", "DUB"] // キーの配列を取得する。順序は、登録内容による。
値の配列を取得
ただし順序は保証されない。
var airports = ["TYO": "Tokyo", "DUB":"Dublin"]
airports.values // ["Tokyo", "Dublin"] // 値の配列を取得する。順序は、登録内容による。
空の辞書を生成
var dic = Dictionary<Int, String>()
// 一度生成した後なら、これも可能.
dic = [:]
辞書もJavaでいう参照型っぽい
let
配列同様、letに格納すると、要素は変更できるけど、要素数は変更できなくなる。