如何在Swift中对二维数组内元素排序?能否在map()中实现?
解决方法
你完全可以在调用map()方法时完成子数组的排序,只需要在取出字典对应的值后,对每个子数组按Item的name属性做字母升序排序即可。
修改后的关键代码
把原来的map行替换成:
itemGroups = dictionaryOfItems.keys.sorted().map { dictionaryOfItems[$0]!.sorted { $0.name < $1.name } }
完整修正后的函数
class Item{ var name: String = "" } var itemGroups: [[Item]] = [] func createGroupsOfItems(){ // dictionary signature just for reference var dictionaryOfItems: [String: [Item]] = [:] // 这里需要先给dictionaryOfItems填充数据(原代码中缺少这一步) // 先按字典key排序,再对每个子数组按Item.name字母排序 itemGroups = dictionaryOfItems.keys.sorted().map { key in dictionaryOfItems[key]!.sorted { $0.name < $1.name } } // 修正原代码中的变量名笔误 print("Groups Output: \(itemGroups)") print("Dictionary Output: \(dictionaryOfItems)") }
说明
- 首先通过
dictionaryOfItems.keys.sorted()保证组的顺序是按字典key的字母排序的; - 在
map的闭包里,对每个取出的子数组调用sorted(by:),利用字符串的<运算符比较Item的name属性,实现子数组内元素的字母升序排列; - 原代码里存在变量名笔误:
sectionsOfItems应该是itemGroups,sectionForCategory应该是dictionaryOfItems,已经在修正后的代码里调整。
这样处理后,输出的itemGroups就会和你期望的结构一致,每个子数组内的Item按name字母顺序排列。
内容的提问来源于stack exchange,提问作者fs_tigre
相关产品推荐
相关产品推荐

