You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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)")
}

说明

  1. 首先通过dictionaryOfItems.keys.sorted()保证组的顺序是按字典key的字母排序的;
  2. 在map的闭包里,对每个取出的子数组调用sorted(by:),利用字符串的<运算符比较Item的name属性,实现子数组内元素的字母升序排列;
  3. 原代码里存在变量名笔误:sectionsOfItems应该是itemGroups,sectionForCategory应该是dictionaryOfItems,已经在修正后的代码里调整。

这样处理后,输出的itemGroups就会和你期望的结构一致,每个子数组内的Item按name字母顺序排列。

内容的提问来源于stack exchange,提问作者fs_tigre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 11:25:20