Есть ли способ эффективной сортировки массива словарей на основе значения параметра и возврата отдельных массивов для каждого из этих значений параметра?
Пример массива:
[["value":3, "groupID":1],
["value":5, "groupID":2],
["value":2, "groupID":1],
["value":6, "groupID":3],
["value":1, "groupID":2],
["value":9, "groupID":3]]
Требуемый возвратвыход 1 (отсортированный массив):
[["value":2, "groupID":1],
["value":3, "groupID":1],
["value":1, "groupID":2],
["value":5, "groupID":2],
["value":6, "groupID":3],
["value":9, "groupID":3]]
Требуемый возврат 2 (разделить массивы по параметру):
[["value":2, "groupID":1],
["value":3, "groupID":1]]
[["value":1, "groupID":2],
["value":5, "groupID":2]]
[["value":6, "groupID":3],
["value":9, "groupID":3]]
Одно решение, которое я придумал, довольно медленное, а именно::
//variable array is the master array of dictionaries
var sorted = [[Int:Int]]()
//(Output 1) sorted is the sorted array
sorted = array.sorted { t1, t2 in
if t1.groupID == t2.groupID {
return t1.value < t2.value
}
return t1.groupID < t2.groupID
}
var separated = [Int:[Int:Int]]()
//(Output 2) separated is a dictionary that contains separate arrays, all of which have the same of a designated property. Essentially the same thing as separate, distinct arrays sorted by parameter for Output 2
separated = [
for i in 0..<sorted.count {
separated[sorted[i].channel]?.append(sorted[i])
}
Есть мысли, как сделать это быстрее?Спасибо!