如何使用Swift初始化一个不区分大小写的字典?



我的问题是这段代码是区分大小写的。如果我有"山姆"它们会被分类到不同的键中。我能想到的任何方法都是将字符串全部转换为小写,但我希望它在不区分大小写的情况下保持正常排序:


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]  }

最新更新