Swift:如何将一个字符串数组拆分成多个具有匹配值的数组?

6
假设我有一个值数组(按字母顺序排列),例如[A, B, B, B, D, G, G, H, M, M, M, M, Z],表示用户的姓氏。 我想创建一个表索引,那么将这样的数组(任意数量的姓氏以字母表中所有字母开头)分成数组的最佳方法是什么,例如[A] [B, B, B] [D] [G, G] [H] [M, M, M, M] [Z] 这似乎是创建具有多个部分的表的最佳方法,其中用户按姓氏分开。 谢谢您的帮助!
2个回答

12
你可以使用name.characters.first获取姓名的首字母,并通过比较构建数组嵌套数组:
let names = ["Aaron", "Alice", "Bob", "Charlie", "Chelsea", "David"]

var result: [[String]] = []
var prevInitial: Character? = nil
for name in names {
    let initial = name.characters.first
    if initial != prevInitial {  // We're starting a new letter
        result.append([])
        prevInitial = initial
    }
    result[result.endIndex - 1].append(name)
}

print(result)  // [["Aaron", "Alice"], ["Bob"], ["Charlie", "Chelsea"], ["David"]]

非常感谢。我该如何修改行 let initial = name.characters.first 以便它可以检测空格后面的字符(用于姓氏)?即,我希望它按 John Doe 中的 D 进行排序。 - Baylor Mitchell
您可以查看此答案,了解在空格处拆分字符串的方法。 - jtbandes

1
Dictionary(grouping: names) { $0.split(separator: " ").last?.first } .values

如有必要,请排序!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接