我的问题是这段代码是区分大小写的。如果我有"山姆"它们会被分类到不同的键中。我能想到的任何方法都是将字符串全部转换为小写,但我希望它在不区分大小写的情况下保持正常排序:
var dict: [String: [String]] = [:]
for string in array {
if (dict[string] != nil) {
dict[string]?.append(string)
}
else {
dict[string] = [string]
}
}
现在我的代码将导致:
["Sam": ["Sam"], "sam", ["sam"]]
而不是我想要的:
["Sam": ["Sam", "sam"]]
我怎样才能做到这一点?
您可以使用reduce(into:)
方法并将每个元素的大写赋值给结果:
let array = ["Sam", "sam", "SAM"]
let dict: [String: [String]] = array.reduce(into: [:]) {
$0[$1.capitalized, default: []].append($1)
}
print(dict) // ["Sam": ["Sam", "sam", "SAM"]]
如果您只想从给定数组中获得不区分大小写的键和区分大小写的值,最短的解决方案可能是这样的:
var dict: [String: [String]] = [:]
array.forEach { dict[$0.lowercased(), default: []] += [$0] }