[swift]按其子元素的价值排序多维数组

标签: json Swift
发布时间: 2017/3/1 1:21:33
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我是 Swift 新手,和在排序多维数组有困难。 (Alamofire 和 SwiftyJSON 是安装和导入)

我想主要的 JSON 数组排序每个人最高分。 我是能够排序 ["分数"] 的每个都有

     for x in 0..<JSONArray.count{
     let b  = JSONArray[x]["scores"].array?.sorted{$0["test"] < $1["test"]}
      }         

然而,不知道如何影响主要的 JSON 数组顺序。

这里是我的 JSON 文件,

{"students": [{
    "id": 1,
    "profile": [{
        "name": "Kenneth",
        "age": 19
    }],
    "scores": [{
        "test": 62
    }, {
        "test": 80
    }, {
        "test": 95
    }]
}, {
    "id": 2,
    "profile": [{
        "name": "Thomas",
        "age": 12
    }],
    "scores": [{
        "test": 60
    }, {
        "test": 92
    }, {
        "test": 30
    }]
}, {
    "id": 3,
    "profile": [{
        "name": "May",
        "age": 15
    }],
    "scores": [{
        "test": 62
    }, {
        "test": 72
    }, {
        "test": 100
    }]
}]}

我想要的最后的 JSON 输出是

{"students": [{
    "id": 3,
    "profile": [{
        "name": "May",
        "age": 15
    }],
    "scores": [{
        "test": 100
    }, {
        "test": 72
    }, {
        "test": 62
    }]
}, {
    "id": 1,
    "profile": [{
        "name": "Kenneth",
        "age": 19
    }],
    "scores": [{
        "test": 95
    }, {
        "test": 80
    }, {
        "test": 62
    }]
}, {
    "id": 2,
    "profile": [{
        "name": "Thomas",
        "age": 12
    }],
    "scores": [{
        "test": 92
    }, {
        "test": 60
    }, {
        "test": 30
    }]
}]}

谢谢你的帮助 !

解决方法 1:

目前排序 scores 升序排序需要排序降序顺序对数组然后在主要 json 数组中设置此排序数组。后排序主要阵列使用 scores 数组的第一个值。

//Forst soret main json by max score
var jsonArray = json["students"].arrayValue

//Sort score array
for x in 0..<jsonArray.count{
    let sortedScores  = jsonArray[x]["scores"].arrayValue.sorted{$0["test"] > $1["test"]}
    jsonArray[x]["scores"] = JSON(sortedScores)
}

//Sort main array using first object of scores array
let sortedJSON = jsonArray.sorted { $0["scores"].arrayValue[0]["test"].intValue > $1["scores"].arrayValue[0]["test"].intValue }

print(sortedJSON)
赞助商