今回はSwiftのDictionary型についてまとめようと思います
Dictionaryとは?
Dictionaryとはキーと値をセットにした配列のようなものです
例えば、Dictionaryでは、「名前 : “山田”」「年齢 :23」「性別 : “男”」のようにキーと値をセットで作成します。 この場合にはキーが名前・年齢・性別で、値は“山田”・23・“男”です
キーに紐づく値を参照できるため、ディクショナリを辞書型とも呼びます
注意点としては順番が保証されているわけではないので、何番目に取得できるなどの処理を行う場合には注意が必要です
基本的な使い方は次のように定義します
let fruits: Dictionary<String, Int> = ["りんご": 100, "オレンジ": 80, "メロン": 700] // キーを指定することで値を取得できる fruits["いちご"] for (key, value) in fruits { print("\(key)は\(value)円です。") }
今回はキーと値をそれぞれString型とInt型で定義しています。定義と違う型を指定するとエラーになるので注意をしてください
そして値を追加・更新する場合には次のように行います
let fruits: Dictionary<String, Int> = ["りんご": 100, "オレンジ": 80, "メロン": 700] // キーが存在する場合には更新、ない場合には追加 fruits.updateValue(300, forKey: "いちご") // キーが存在する場合には更新、ない場合には追加 fruits["いちご"] = 300
fruits["いちご"] = 300
の方が一般的に使われていると思います
削除する場合には次のように対応します
let fruits: Dictionary<String, Int> = ["りんご": 100, "オレンジ": 80, "メロン": 700] //要素の削除 fruits.removeValue(forKey:"りんご")
Dictionaryの細かい処理
ここからはもう少し細かいDictionaryで行う処理を見ていこうと思います
キーでソートする
1つ目はキーでソートするパターンです。 Dictionaryは順番が保証されているわけではないのでソートする必要が出てくるかもしれません
var dic = [ "C" : 2, "A" : 3, "B" : 4, ] // [(key: "A", value: 3), // (key: "B", value: 4), // (key: "C", value: 2)]の順で出力される print(dic.sorted(by: { $0.key < $1.key}))
<
で昇順、>
で降順にソートされます
グルーピングする
grouping
を使うことで、配列のデータを特定の条件でDictionaryにすることができます
let names = ["Apple", "Grape", "Apricot", "Guava"] // グルーピングする["G": ["Grape", "Guava"], "A": ["Apple", "Apricot"]] let initialGroup = Dictionary(grouping: names) { $0.first ?? "#" } // 文字数をキーとして文字数が同じデータをまとめる // [5: ["Apple", "Grape", "Guava"], 7: ["Apricot"]] let countGroup = Dictionary(grouping: names) { $0.count }
まとめ
ここまでDictionaryの処理を確認しましたが、本来はDictionaryを使うのは設計を見直すべきかなと個人的には感じています
しかし、要件上使わざるをえない場合もあるかもしれないのでそのためのリファレンスになればいいかなと思います