Swift 在名称数组中添加类似通讯簿的字母
我试着将一组人(现在简化为一个名字)进行排序,不仅对其进行排序,还将第一个字母添加到所有人面前,以这个字母开头 基本上这个:[“丹尼尔”、“迈克尔”、“丽莎”、“莉娜”]应该变成这个:[“D”、“丹尼尔”、“L”、“莉娜”、“丽莎”、“M”、“迈克尔”] 我有一些东西在操场上工作,但对我来说,这看起来像地狱一样难看,不知道如果人们得到成千上万或更多Swift 在名称数组中添加类似通讯簿的字母,swift,nsarray,Swift,Nsarray,我试着将一组人(现在简化为一个名字)进行排序,不仅对其进行排序,还将第一个字母添加到所有人面前,以这个字母开头 基本上这个:[“丹尼尔”、“迈克尔”、“丽莎”、“莉娜”]应该变成这个:[“D”、“丹尼尔”、“L”、“莉娜”、“丽莎”、“M”、“迈克尔”] 我有一些东西在操场上工作,但对我来说,这看起来像地狱一样难看,不知道如果人们得到成千上万或更多 //: Playground - noun: a place where people can play import Cocoa var pr
//: Playground - noun: a place where people can play
import Cocoa
var previousName: String?
let people = ["Martin", "Michael", "Lisa", "Lena", "Dirk"]
var peopleWithLetters: [String] = []
people.sorted { $0.localizedCaseInsensitiveCompare($1) == ComparisonResult.orderedAscending }.forEach {
if $0.uppercased().characters.first! != previousName?.uppercased().characters.first! {
peopleWithLetters.append("\($0.uppercased().characters.first!)")
}
previousName = $0
peopleWithLetters.append($0)
}
任何关于如何简化或遵循最佳实践的想法都将受到高度赞赏。这是函数式编程的完美案例
- 将名称数组映射到首字母数组
- 使用集合删除重复项
- 把字母和名字结合起来
- 对数组进行排序
//: Playground - noun: a place where people can play
func addSections(in words: [String]) -> [String] {
let sections = Set(words.map { String($0[$0.startIndex]) })
let wordsWithSections = words + sections
return wordsWithSections.sorted { $0 < $1 }
}
let names = ["Daniel", "Michael", "Lisa", "Lena"]
addSections(in: names)
/:操场-名词:人们可以玩耍的地方
func addSections(大写:[String])->[String]{
let sections=Set(words.map{String($0[$0.startIndex]))
让wordsWithSections=单词+部分
返回单词swithSections.sorted{$0<$1}
}
让名字=[“丹尼尔”、“迈克尔”、“丽莎”、“莉娜”]
添加节(在:名称中)
虽然如果您计划使用此数组来提供表格视图(节/行),但最好使用您在评论中提到的字典。使用Swift时,“丑得要命”似乎是正确的方法。SCNR添加字母和排序。有趣的想法!但是需要去掉那些没有名字的字母。我检查了新的Swift 4语法,发现了一种使用“分组依据”初始化词典的新方法,这基本上起到了作用。