首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按Swift中的开头字符将数组拆分为多维数组?

按Swift中的开头字符将数组拆分为多维数组?
EN

Stack Overflow用户
提问于 2016-01-17 03:47:47
回答 1查看 529关注 0票数 1

例如,我想要数组

代码语言:javascript
复制
["ABC", "ADE", "BCD", "HYD", "ZYX", "ZZZ"]

拟转换为:

代码语言:javascript
复制
[
    ["ABC", "ADE"],
    ["BCD"],
    ["HYD"],
    ["ZYX", "ZZZ"],
]

那么我怎么能做到这一点呢?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-17 04:13:26

使用数组创建一个中间字典,该字典将初始字母映射为以该字母开头的字符串数组,然后从字典中创建最终数组:

使用Dictionary(grouping:by)

现在可以使用Dictionary(grouping:by:)创建字典了。

代码语言:javascript
复制
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"]

代码语言:javascript
复制
let arr2 = dict.keys.sorted().compactMap { dict[$0] }
print(arr2)

["ABC“、"ADE”、"BCD“、"HYD”、"ZYX“、"ZZZ"]

注意:我使用.prefix(1)而不是.first!,因为如果原始数组包含空字符串""prefix(1)不会崩溃。

原始答案:

代码语言:javascript
复制
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"]

代码语言:javascript
复制
let arr2 = dict.keys.sorted().map { dict[$0]! }
print(arr2)

["ABC“、"ADE”、"BCD“、"HYD”、"ZYX“、"ZZZ"]

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34834895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档