2017-02-17 5 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

Спасибо за совет. Это мой первый пост в stackoverflow, задающий вопрос ... и не знал, как наилучшим образом поднять мой вопрос аккуратно ... Я улучшу следующий раз :) – 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

Эй, Нира, спасибо за вашу помощь! Он отлично работает! Я не знал, что могу сделать так: «jsonArray [x] [« scores »] = JSON (sortedScores)», чтобы обновить таблицу. – Superpotato

+0

@Superpotato Welcome mate :) –

+0

@Superpotato Если мое решение работает, пожалуйста, примите мой ответ. Если вы не знаете, как принять ответ на StackOverflow, проверьте эту ссылку http://meta.stackexchange.com/a/5235/346600 –

Смежные вопросы