Как отсортировать массив, который содержит словари? - PullRequest
30 голосов
/ 28 января 2011

У меня есть массив, который содержит словари в нем;так как я могу отсортировать массив в соответствии со значениями ключа словаря?

Ответы [ 5 ]

85 голосов
/ 28 января 2011

Если каждый элемент в массиве является словарем, содержащим определенный ключ, вы можете отсортировать массив, используя дескриптор сортировки.Например, если каждый элемент представляет собой словарь, содержащий ключ с именем «name»:

NSSortDescriptor *sortByName = [NSSortDescriptor sortDescriptorWithKey:@"name"
    ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortByName];
NSArray *sortedArray = [array sortedArrayUsingDescriptors:sortDescriptors];
10 голосов
/ 06 марта 2014

Другой способ добиться этого - использовать sortedArrayUsingComparator: метод

NSArray *sortedArray = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
    return [[obj1 valueForKey:@"value"] compare:[obj2 valueForKey:@"value"]];
}];
1 голос
/ 28 января 2011

почему бы вам не использовать отсортированный словарь, в котором свойство отсортированных элементов уже идет вместе со структурой данных?

Пожалуйста, проверьте здесь

Надеюсьэто помогает.

0 голосов
/ 23 мая 2017
 let arrDescriptor = NSSortDescriptor(key: "order", ascending: true)
 let sortDescriptors: NSArray = [arrDescriptor]
 let sortedArray = instancesubArray.sortedArray(using: sortDescriptors as [AnyObject] as [AnyObject] as! [NSSortDescriptor])

 print(sortedArray)
0 голосов
/ 18 ноября 2013

Вышеприведенный общий ответ от Bavarious помог мне. Просто хочу добавить еще одну вещь. Если вы хотите отсортировать изменяемый массив, используйте что-то вроде приведенного ниже кода

NSSortDescriptor *sortByName = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortByName];
NSMutableArray *sortedArray = [[NSMutableArray sortedArrayUsingDescriptors:sortDescriptors]mutableCopy];
...