Swift 4中如何对JSON数组按分数进行排序?
按Score排序JSON数组的实现方法
没问题,这就给你明确的实现方法!针对你手里的NSArray类型的JSON数组,有两种常用的排序方式,我都给你列出来:
方式一:直接对NSArray进行排序(快速实现)
这种写法直接利用NSArray的sortedArray(usingComparator:)方法,适合你已经习惯Objective-C风格集合类的场景:
let sortedArray = json.sortedArray { obj1, obj2 in // 取出两个对象的Score值(这里因为你确定数据结构,所以用强制解包) let score1 = (obj1 as! NSDictionary).object(forKey: "Score") as! Int let score2 = (obj2 as! NSDictionary).object(forKey: "Score") as! Int // 这里是**升序排序**(分数从低到高),如果要降序,把`<`换成`>`即可 return score1 < score2 } as! NSArray
排序后你就可以像之前一样访问sortedArray里的元素啦。
方式二:转成Swift原生数组(更安全)
强制解包(as!)有崩溃风险,如果JSON数据里偶尔出现Score缺失或者类型不对的情况,推荐用这种更安全的写法:
// 先把NSArray转成Swift原生的字典数组 if let swiftJsonArray = json as? [[String: Any]] { // 调用Swift数组的`sorted(by:)`方法排序 let sortedSwiftArray = swiftJsonArray.sorted { item1, item2 in // 安全获取Score,取不到的话默认给0 let score1 = item1["Score"] as? Int ?? 0 let score2 = item2["Score"] as? Int ?? 0 // 同样,改符号就能切换升序/降序 return score1 < score2 } // 如果之后还需要NSArray类型,转回去就行 let sortedNSArray = sortedSwiftArray as NSArray }
这种写法通过可选绑定和默认值,避免了数据异常导致的崩溃,更适合生产环境的代码。
内容的提问来源于stack exchange,提问作者Faizy Zaidy
相关产品推荐
相关产品推荐

