Domanda

Ho bisogno di riordinare un plist (una serie di dictonaries) per valore chiave.

In questo contenuto esempio, vorrei ordinare in base al valore per il Nome chiave (Mt, Joe):

<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>

C'è un modo semplice? Non voglio farlo in codice ogni volta che l'applicazione viene eseguita, voglio solo farlo nel file di dati.

Tutte le idee?

Felice di utilizzare qualsiasi strumento per ottenere questo fatto:. Parametri ninja per l'ordinamento sulla riga di comando, un editor di plist, editor di testo o qualsiasi altra cosa

È stato utile?

Soluzione 5

ho finito per scrivere uno script PHP cinque linea per riordinarli. Credo di avere ancora un sacco di cacao da imparare prima di poter fare qualcosa che rapidamente e comodamente con esso.

Grazie per le vostre risposte.

Altri suggerimenti

Questa è un'altra soluzione di codifica, ma non sarebbe difficile fare uno strumento di base riga di comando che avvolto attorno ad esso:

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];

ho scritto un piccolo script Python che legge da standard input e scrive su standard output:

# sortplist.py
import plistlib
import sys

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

Quindi, basta fare 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...
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top