He *_*何一非 1 arrays multidimensional-array swift
例如,我想要数组
["ABC", "ADE", "BCD", "HYD", "ZYX", "ZZZ"]
Run Code Online (Sandbox Code Playgroud)
转换为:
[
["ABC", "ADE"],
["BCD"],
["HYD"],
["ZYX", "ZZZ"],
]
Run Code Online (Sandbox Code Playgroud)
那么我该如何实现呢?谢谢!
使用您的数组创建一个中间字典,该字典将初始字母映射到以该字母开头的字符串数组,然后从字典中创建最终数组:
使用 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)
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)["H": ["HYD"], "A": ["ABC", "ADE"], "B": ["BCD"], "Z": ["ZYX", "ZZZ"]]
let arr2 = dict.keys.sorted().compactMap { dict[$0] }
print(arr2)
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)[["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)
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)["A": ["ABC", "ADE"], "H": ["HYD"], "B": ["BCD"], "Z": ["ZYX", "ZZZ"]]
let arr2 = dict.keys.sorted().map { dict[$0]! }
print(arr2)
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)[["ABC", "ADE"], ["BCD"], ["HYD"], ["ZYX", "ZZZ"]]