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

如何基于id升序排序服务器返回的NSMutableArray元素?

没问题,给你两种可行的方案,看你更习惯哪种风格:

方法1:直接对NSMutableArray排序

如果你想直接在拿到的NSMutableArray上做原地排序,可以用它的sortUsingComparator方法,通过闭包定义按id升序的比较逻辑:

if let myArray = sdfg["entries"] as? NSMutableArray {
    myArray.sortUsingComparator { obj1, obj2 in
        // 先把元素转成字典,并取出id字段(确保类型是Int)
        guard let dict1 = obj1 as? [String: Any],
              let id1 = dict1["id"] as? Int,
              let dict2 = obj2 as? [String: Any],
              let id2 = dict2["id"] as? Int else {
            // 如果id字段缺失或类型错误,默认保持原顺序
            return .orderedSame
        }
        // 按id升序排列
        return id1.compare(id2)
    }
    print(myArray) // 此时数组已按id从小到大排序,name字段也对应正确顺序
}

方法2:转成Swift数组处理(更推荐)

Swift原生的数组操作更类型安全、可读性更强,你可以先把数据转成Swift的[[String: Any]]类型,排序后再转成NSMutableArray(如果需要的话):

if let entries = sdfg["entries"] as? [[String: Any]] {
    // 按id升序排序Swift数组
    let sortedEntries = entries.sorted { dict1, dict2 in
        guard let id1 = dict1["id"] as? Int,
              let id2 = dict2["id"] as? Int else {
            return false
        }
        return id1 < id2
    }
    // 如果仍然需要NSMutableArray类型,用下面的代码转换
    let sortedMutableArray = NSMutableArray(array: sortedEntries)
    print(sortedMutableArray)
}

两种方法都能实现你要的效果:排序后数组里的元素会按id从2980→2986→2987排列,对应的name字段也会跟着变成"HELLO"→"HELLO THERE"→"HOW ARE YOU"的顺序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 21:49:04