2017-02-17 10 views
0

私は素早く初心者であり、多次元配列をソートするのが難しいです。 (AlamofireとSwiftyJSONがインストールされ、輸入されている)多次元配列を子の値で並べ替える

私はそれぞれの男の最高のスコアによってメインJSON配列をソートしたいです。 私は

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

とそれぞれの[「スコア」]並べ替えることができましたしかし、私は、メインのJSON配列の順序に影響するのか分かりません。ここで

は私が望む最後の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 
    }] 
}]} 

ある

{"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ファイルであるあなたの助けをありがとう!

+0

私たちに実際のSwiftテストケースを提供してください。 JSONを有効なSwiftにフォーマットする時間を無駄にしたくありません。 – Alexander

+0

アドバイスありがとうございます。これは私の最初のポストstackoverflow質問...と私の質問をきちんと持ち出す最善の方法を知らなかった...私は次回に改善する:) – Superpotato

答えて

0

現在、scoresの配列を昇順にソートしています。降順にソートし、main json Arrayでこのソート配列を設定する必要があります。その後、アレイの最初の値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

@スーパーペッタートウェルカムメイト:) –

+0

@スーパーポタト私の解決策がうまくいくなら、私の答えを受け入れてください。 StackOverflowで回答を受け入れる方法がわからない場合は、このリンクをチェックしてください。http://meta.stackexchange.com/a/5235/346600 –

関連する問題