Как отсортировать массив, содержащий словари?


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

5 28

5 ответов:

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

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

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

NSArray *sortedArray = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
    return [[obj1 valueForKey:@"value"] compare:[obj2 valueForKey:@"value"]];
}];

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

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

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

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

NSSortDescriptor *sortByName = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortByName];
NSMutableArray *sortedArray = [[NSMutableArray sortedArrayUsingDescriptors:sortDescriptors]mutableCopy];
 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)