2017-02-17 92 views
0

我是一个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 
    }] 
}]} 

谢谢您的帮助!

+0

给我们一个实际的Swift测试用例。我们不想浪费时间将您的JSON格式化为有效的Swift。 – Alexander

+0

感谢您的咨询。这是我的计算器上的第一篇文章提出的问题......,不知道最好的方式把我的问题整齐......我会提高下一次:) – Superpotato

回答

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) 
+0

嘿Nirav,感谢您的帮助!它完美的工作!我不知道我可以这样做“jsonArray [x] [”scores“] = JSON(sortedScores)”,来更新表格。 – Superpotato

+0

@Superpotato欢迎队友:) –

+0

@Superpotato如果我的解决方案是有效的,那么请接受我的回答。如果你不知道如何接受StackOverflow上回答检查此链接http://meta.stackexchange.com/a/5235/346600 –