如何仅使用Swift 5+实现按名字与姓氏排序?
按姓氏排序Swift列表的实现方法
你当前的代码是按fullName整体字典序排序,要实现按姓氏排序,可以通过拆分姓名字符串提取姓氏来完成,具体实现如下:
@objc func handleSortByLastName() { let sortedList: [List] = self.viewModel.names.sorted { // 拆分姓名,提取最后一段作为姓氏(兼容中间名情况) let lastName0 = $0.fullName.components(separatedBy: .whitespaces).last ?? $0.fullName let lastName1 = $1.fullName.components(separatedBy: .whitespaces).last ?? $1.fullName // 先按姓氏排序,姓氏相同则按全名排序 if lastName0 != lastName1 { return lastName0 < lastName1 } else { return $0.fullName < $1.fullName } } replaceNewList(newList: sortedList) }
细节说明
- 用
components(separatedBy: .whitespaces)拆分姓名,取最后一段作为姓氏,适配带中间名的姓名格式(比如"Mary Ann Davis"会提取"Davis"作为姓氏) - 当两个元素姓氏相同时,回退到按全名排序,避免同姓氏的条目排序混乱
- 如果姓名没有空格(比如单字名),会直接用整个姓名作为排序依据,兼容特殊情况
内容的提问来源于stack exchange,提问作者TaeVon Lewis
相关产品推荐
相关产品推荐

