🍁

Swift: 文字列の配列を頭文字でグルーピングして辞書にする

2022/11/27に公開
let array = [
    "apple",
    "banana",
    "cherry",
    "aka",
    "blue",
    "chocolate",
    "and",
    "but",
    "can"
]

👆を👇のようにしたい。

let dict = [
    "a": ["apple", "aka", "and"],
    "b": ["banana", "blue", "but"],
    "c": ["cherry", "chocolate", "can"]
]

これまではこんな感じで書いていました。

var dict = [String: [String]]()
array.forEach { str in
    let initial = str.first!.description
    if dict.keys.contains(initial) {
        dict[initial]?.append(str)
    } else {
        dict[initial] = [str]
    }
}

実はDictionary(grouping:by:)を使えば、もっとシンプルに書けました。

let dict = Dictionary(grouping: array) { $0.first!.description }

Discussion