Есть ли простой способ сортировки списка (массива словарей) по значению ключа?

StackOverflow https://stackoverflow.com/questions/864412

Вопрос

Мне нужно изменить порядок списка (массива словарей) по значению ключа.

В этом примере содержимого я хотел бы упорядочить по значению имени ключа (Мэтт, Джо):

<dict>
    <key>Name</key>
    <string>Matt</string>
    <key>Details</key>
    <string>Me</string>
</dict>
<dict>
    <key>Name</key>
    <string>Joe</string>
    <key>Details</key>
    <string>You</string>
</dict>

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

Есть идеи?

Рад использовать любой инструмент, чтобы сделать это:параметры ninja для сортировки в командной строке, редакторе plist, текстовом редакторе или чем-то еще.

Это было полезно?

Решение 5

В итоге я написал пятистрочный PHP-скрипт, чтобы изменить их порядок.Думаю, мне еще предстоит многому научиться какао, прежде чем я смогу делать с ним что-то так быстро и комфортно.

Спасибо за ваши ответы.

Другие советы

Это еще одно решение для кодирования, но было бы несложно создать базовый инструмент командной строки, который бы включал его:

NSArray* arrayOfDictionaries; //the array we want to sort
NSSortDescriptor* nameSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"Name" ascending:YES];
NSArray* sortedArray = [arrayOfDictionaries sortedArrayUsingDescriptors:[NSArray arrayWithObject:nameSortDescriptor]];
[nameSortDescriptor release];

Я написал небольшой скрипт Python, который читает стандартный ввод и записывает в стандартный вывод:

# sortplist.py
import plistlib
import sys

plist = plistlib.readPlist(sys.stdin)
plistlib.writePlist(plist, sys.stdout)

Итак, просто сделай python sortplist.py <original.plist >sorted.plist.

// Our key array
NSMutableArray *unsortedKeys = [NSMutableArray array];
// Assume we have some array of dictionaries
for( NSDictionary *dict in dictionaryArray ) {
  NSString *key = [dict objectForKey:@"Name"];
  if( key )
    [unsortedKeys addObject:key];
}
NSArray *sortedKeys = [unsortedKeys sortedArrayUsingSelector:@selector(compare:)];

// Do things with the keys...

Python — ваш друг: http://effbot.org/zone/element-sort.htm :-)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top