例如,我想要数组
["ABC", "ADE", "BCD", "HYD", "ZYX", "ZZZ"]拟转换为:
[
["ABC", "ADE"],
["BCD"],
["HYD"],
["ZYX", "ZZZ"],
]那么我怎么能做到这一点呢?谢谢!
发布于 2016-01-17 04:13:26
使用数组创建一个中间字典,该字典将初始字母映射为以该字母开头的字符串数组,然后从字典中创建最终数组:
使用Dictionary(grouping:by)的
现在可以使用Dictionary(grouping:by:)创建字典了。
let arr = ["ABC", "ADE", "BCD", "HYD", "ZYX", "ZZZ"]
let dict = Dictionary(grouping: arr, by: { $0.prefix(1) })
print(dict)["H":"HYD","A":"ABC","ADE","B":"BCD","Z":"ZYX","ZZZ"]
let arr2 = dict.keys.sorted().compactMap { dict[$0] }
print(arr2)["ABC“、"ADE”、"BCD“、"HYD”、"ZYX“、"ZZZ"]
注意:我使用.prefix(1)而不是.first!,因为如果原始数组包含空字符串"",prefix(1)不会崩溃。
原始答案:
let arr = ["ABC", "ADE", "BCD", "HYD", "ZYX", "ZZZ"]
var dict = [Character : [String]]()
for str in arr {
if let first = str.first {
dict[first, default: []] += [str]
}
}
print(dict)["A":"ABC“、"ADE”、"H":"HYD“、"B":"BCD”、"Z":"ZYX“、"ZZZ"]
let arr2 = dict.keys.sorted().map { dict[$0]! }
print(arr2)["ABC“、"ADE”、"BCD“、"HYD”、"ZYX“、"ZZZ"]
https://stackoverflow.com/questions/34834895
复制相似问题