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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:13:44