あなたはreduce(into:)
方法(Swift4)を使用し、次のようにすることができます
let contacts = ["Aaron", "Adam", "Brian", "Brittany", ""]
let dictionary = contacts.reduce(into: [String:[String]]()) { result, element in
// make sure there is at least one letter in your string else return
guard let first = element.first else { return }
// create a string with that initial
let initial = String(first)
// initialize an array with one element or add another element to the existing value
result[initial] = (result[initial] ?? []) + [element]
}
print(dictionary) // ["B": ["Brian", "Brittany"], "A": ["Aaron", "Adam"]]
あなたがSwift3以前を使用している場合は、クロージャ内で可変の結果辞書を作成する必要があります:
let contacts = ["Aaron", "Adam", "Brian", "Brittany", ""]
let dictionary = contacts.reduce([String:[String]]()) { result, element in
var result = result
guard let first = element.first else { return result }
let initial = String(first)
result[initial] = (result[initial] ?? []) + [element]
return result
}
print(dictionary) // ["B": ["Brian", "Brittany"], "A": ["Aaron", "Adam"]]
結果がソートされないことに注意してください。辞書は順序付けられていないコレクションです。
let sorted = dictionary.sorted {$0.key < $1.key}
print(sorted)
「[(キー: 『A』、値:[」アーロン、あなたの辞書をソートし(キー、値)の配列を返す必要がある場合は、次のようにキーでソート使用することができタプル" "アダム"])、(キー: "B"、値:[ "ブライアン"、 "ブルターニュ"])] \ n" は
はい、ただし、文字プロパティにアクセスする必要はありません。 –
Tru e、古い習慣は激しく死ぬ。 –
そして、これにはすべての要素に少なくとも1つの文字が必要です –