如何基于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
相关产品推荐
相关产品推荐

