2015-09-21 5 views
3

У меня есть словарь, содержащий массивы в качестве его элементов, и я хочу сортировать по одному из значений массива. Все решения, которые я нашел для сортировки словарей, где для отдельных элементов, а не массивов. Кроме того, я не понял, что означает $ 0.0? Ниже приведен пример кода того, что я пытаюсь выполнить.Как отсортировать словарь по значению массива, содержащемуся в словаре Swift

var dict = ["Mike": [62, 160], "Jim": [72, 210], "Tony": [68, 187]] 

//I want to sort by the height (array values [0]) from highest value to lowest. 
//The output would look like this: 

"Jim": [72, 210] 
"Tony": [68,187] 
"Mike": [62,160] 

Я относительно новичок в кодировании, поэтому я действительно не знаю, как подойти к этому.

ответ

2

Престола, у вас есть словарь, чтобы быть отсортирован:

let dict = ["Mike": [62, 160], "Jim": [72, 210], "Tony": [68, 187]] 

Вы хотите отсортировать его с некоторой функцией isOrderedBefore: (Self.Generator.Element, Self.Generator.Element) -> Bool так, если первый один элемент должен были выше второго, вы должны ввести a > b в функцию и так далее.

let sortedDict = dict.sort { (first: (String, Array<Int>), second: (String, Array<Int>)) -> Bool in 
    return first.1[0] > second.1[0] 
} 

Это то же самое, как:

let sortedDict = dict.sort { 
    return $0.1[0] > $1.1[0] 
} 

Или:

let sortedDict = dict.sort { $0.1[0] > $1.1[0] } 

$0 означает, что переменная ваша функция имеет номер 0, и так далее. $0.0 означает, что у вас есть первое поле словаря (в вашем случае это имя), а $0.1 означает, что это второе поле словаря (массив).

+0

Это именно то, что я хотел. Спасибо! – abuessing

0

Вы должны сделать объект (или структуру, если он подходит к случаю больше) с именем и этими двумя значениями. Затем сохраните все объекты внутри массива, и вы сможете отсортировать их в любом случае.

class MyObject { 

    let name: NSString! 
    let aValue: Integer! 
    let bValue: Integer! 

    // MARK: - Memory Management 

    init(name: NSString, aValue: Integer, bValue: Integer) { 
     self.name = name 
     self.aValue = aValue 
     self.bValue = bValue 
    } 
} 

Тогда где-то еще:

let myArray = // fetch, set the values using init method and sort it 
+0

Итак, я изначально пробовал это, но за то, над чем я работаю, я не думал, что это сработало, а также словарь ... однако, я могу вернуться к этому, теперь я немного научился Подробнее о сортировке вещей – abuessing

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