2012-04-05 15 views
2

Ich habe eine JSON-Zeichenfolge wie folgt;Anzeigen von Datensätzen in aufsteigender Reihenfolge - Logisches Problem

{ 
    "1": { 
     "name": "Jerry", 
     "age": "12" 

    }, 
    "2": { 
     "name": "Bob", 
     "age": "16" 

    "3": {..... 
} 

Ich habe nur zwei Datensätze angezeigt, aber es wird ein 100 Datensätze in dieser JSON sein. Es gibt eine Bestellung in dieser 1,2,3 usw. ist die Bestellnummer der Datensätze.

Ich bestelle diese Datensätze (wie in der Anzeige der ersten Datensatz, und dann 2. und 3. usw.). Mein Code ist unten angegeben.

Es gibt ein Problem hier, wenn ich mehr als 10 Datensätze habe, zeigt es keine Datensätze in der Reihenfolge der Bestätigung. Es zeigt zuerst 1 und dann 11,12,13 ... bis 19. Dann zeigt es 2 und dann 21,22,23 .... bis 29.

Mein Code ist wie folgt, wie kann ich ändern um mein Problem zu lösen?

mögliche Lösung: Wenn wir eine führende 0 in von den Zahlen hinzufügen könnten, die weniger als 10 sind, sollte es richtig herausfiltern. Aber ich weiß, dass dies nicht der richtige Ansatz ist.

NSDictionary *dic = content; 

      self.mutArr = [[NSMutableArray alloc] init]; 

      NSArray *array = [dic allKeys]; 
      NSArray * sortedArray = [array sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]; 

      for (NSString *str in sortedArray) 
      { 
       NSDictionary *dic2 = [dic objectForKey:str]; 
       Person *person = [[Person alloc] init];    
       person.nameOfRestaurant=[dic2 objectForKey:@"name"]; 
       person.personStartDate=[dic2 objectForKey:@"age"]; 

       [self.mutArr addObject:person]; 

      } 

      self.personEntries = [NSArray arrayWithArray:self.mutArr]; 

Antwort

0

Dies liegt daran, dass Sie Zahlen Sortierung lexikografisch (das heißt, als ob sie Worte). Sie sollten eine eigene Implementierung des Sortiervergleichs bereitstellen, der Zeichenfolgen in Ganzzahlen konvertiert und diese erst dann zur Bestellung vergleicht.

+0

Gibt es einen Tutorial/Beispielcode, der erklärt, wie man das macht? – user1315906

+0

@ user1315906 Die Antwort unter [this link] (http://stackoverflow.com/a/1422881/335858) bietet ein funktionierendes Beispiel für das, was Sie zu tun versuchen. – dasblinkenlight

Verwandte Themen