NSMutableArray sortieren von NSStrings mit float Werten darin

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • NSMutableArray sortieren von NSStrings mit float Werten darin

    Hi,

    ich hab ein ultimatives Problem und komme einfach nicht weiter :(

    Ich hoffe mir kann irgendjemand evtl. nen Tip geben, wie ich das lösen kann, weil ich hier nun schon zwei Tage ununterbrochen am Googeln und coden bin und es irgendwie absolut nicht hinbekommen will :(

    Es geht um folgendes.

    Ich lade per JSON ein Array mit Orten und deren Lati und Longitude werten. Wenn diese geladen ist, mache ich folgende Funktion, zum ermitteln der Entfernungen.

    CLLocation *firstLocation = [[CLLocation alloc] initWithLatitude:aktuelleLati longitude:aktuelleLongi];





    for (int aa=0; aa<[theLocations count]; aa++) {



    double lati = [[[theLocations objectAtIndex:aa] objectForKey:@"latitude"] doubleValue];

    double longi = [[[theLocations objectAtIndex:aa] objectForKey:@"longitude"] doubleValue];

    CLLocation *secondLocation = [[CLLocation alloc] initWithLatitude:lati longitude:longi];



    CLLocationDistance distance = [secondLocation distanceFromLocation:firstLocation];

    [[theLocations objectAtIndex:aa] setObject:[NSString stringWithFormat:@"%f",distance] forKey:@"distance"];
    }


    Ich gehe quasi alle Locations einmal durch, ermittele die Distanz zum derzeitigen Standpunkt und speichere den Wert zur Ausgabe in einem TableView in das Array mit dem Key "distance".


    Dann soll im Anschluss das Tableview, bzw. die Einträge nach Entfernung sortiert werden können. Dies mache ich mit folgendem Code:



    NSSortDescriptor *sortDescriptor;

    sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"distance" ascending:YES];

    NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];

    NSArray *sortedArray;

    sortedArray = [theEvents sortedArrayUsingDescriptors:sortDescriptors];



    [theEvents removeAllObjects];



    theEvents = [sortedArray mutableCopy];



    [theTable reloadData];


    Das Problem ist, er sortiert das ganze quasi so:


    1
    10
    11
    2
    22
    3
    4



    Er soll es aber natürlich so sortieren:


    1
    2
    3
    4
    10
    11
    22


    Hat evtl. irgendjemand einen Tip??


    Ihr würdet mir echt absolut helfen.


    Ich danke euch für jeden Tip... Evtl. könnt ihr mir ja meinen Quellcode abändern?


    Hoffentlich kann mir einer Helden, ich verzweifle hier gerade total an dieser Funktion :-(
  • Konkret zu Deiner Frage: Schau mal im "String Programming Guide" auf Seite 21, Stichwort "Sorting Strings like Finder". Grundsätzlich würde ich mich aber fragen, warum Du numerische Werte erst als Zeichenketten speicherst und diese dann wieder "numerisch" sortiert haben möchtest ... Warum speicherst Du Entfernungen nicht z. B. als ein Array von NSNumbers?

    Mattes

    P.S.: Benutze doch bitte das "CODE"-Tag für Programmcode...
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Hi,

    sorry war mein erster Eintrag hier... Ich werde es mir merken fürs nächste Mal mit dem Code Block :)

    Das Array wo alles drin steht ist voll mit Keys, für Adressen, Namen, Telefonnummern, usw. der Locations.

    Dazu habe ich einfach nen Wert hinzugefügt, mit der aktuellen Distanz. Kann ich das auch statt als String, als Float direkt da einfügen, unter dem Key distance?

    Weil als ich das versucht habe, ist die app nicht mehr gelaufen...

    Ich hab gesehen es gibt noch folgendes:

    Quellcode

    1. [[NSSortDescriptor alloc] initWithKey:@"distance" ascending:YES selector:@selector(?)];




    Bei diesem Selector sprechen viele davon, das es damit ginge, mit dem richtigen Wert. Allerdings was ist da der richtige Wert? :)


    Es gibt da z.B. floatForKey:... Aber dann stürzt er auch nur ab... Gibt's da nicht irgendeine einfach Art das richtig zu sortieren? :(
  • Oder wie in der Apple-Doku ?

    Quellcode

    1. NSArray *meinArray1 = [NSArray arrayWithObjects:@"3", @"13", @"7", @"1", @"20", @"4", @"10", @"2",nil];
    2. NSArray *sortedArray = [meinArray1 sortedArrayUsingComparator: ^(id obj1, id obj2)
    3. {
    4. if ([obj1 integerValue] > [obj2 integerValue])
    5. {
    6. return (NSComparisonResult)NSOrderedDescending;
    7. }
    8. if ([obj1 integerValue] < [obj2 integerValue])
    9. {
    10. return (NSComparisonResult)NSOrderedAscending;
    11. }
    12. return (NSComparisonResult)NSOrderedSame;
    13. }];
    14. NSLog(@"sorted Array %@", sortedArray);
    Alles anzeigen