按照Child的值对多维数组进行排序

时间:2017-02-17 04:22:46

标签: arrays json swift sorting swifty-json

我是一名Swift新手,在排序多维数组时遇到困难。 (已安装并导入Alamofire和SwiftyJSON)

我希望按照每个人的最高分数对主JSON数组进行排序。 我能够用

对每个人进行排序["得分"]
<div style="background-image: url('http://placekitten.com/1200/800'); background-size: cover; position: fixed; top: 0; right: 0; bottom: 0; left:0"></div>

但是,我不知道如何影响主要的JSON数组顺序。

这是我的JSON文件,

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

我想要的最终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
    }]
}]}

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

目前,您要按升序对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)