1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Unsere jährliche Weihnachts-Banner-Aktion hat begonnen! Wir freuen uns auf viele, viele kreative Vorschläge.
    Mehr dazu könnt Ihr hier nachlesen: Weihnachtsbanner 2016

    Information ausblenden

Sort Array with Arrays

Dieses Thema im Forum "iOS-Developer" wurde erstellt von AKubi, 23.01.09.

  1. AKubi

    AKubi Alkmene

    Dabei seit:
    08.12.08
    Beiträge:
    30
    Hallo ich habe mal eine Frage, kennt einer ein gutes Tutorial in dem mal gezeigt wird wie man ein Array mit Arrays sortiert.
    So was:
    Code:
    array 1{
        0 => array 2{
              0=>String //nach dem soll Alphabetisch sortiert werden
        }
    }
    
    Ein Array mit Strings geht ja soft aber so etwas kp :(
    Gibt es vieleicht so etwas wie NSSortDescriptor mit einer Compare Funktion?
     
  2. Amin Negm-Awad

    Amin Negm-Awad Süsser Pfaffenapfel

    Dabei seit:
    01.03.07
    Beiträge:
    665
    Wonach soll den sortiert werden? Da in jedem Eintrag des äußeren Arrays ja eine Vielzahl von Elementen liegen, musst du da schon eine Regel finden. Also etwa: Der Wert eines inneren Arrays ist das kleinste vorkommen einer Eigenschaft key oder so.

    Vielleicht malst du mal ein Beispiel auf.
     
  3. AKubi

    AKubi Alkmene

    Dabei seit:
    08.12.08
    Beiträge:
    30
    So mal wieder da, bin grad in den Klausuren deswegen dauert es grad ein wenig.

    Zu meinem Problem. Ich bastle zur Übung grad das Addressbuch vom IPhone nach. Soweit klappt mittlerweile auch alles ganz gut. Mein Problem ist nur das die Zuordnung vom Table View zum Person View. Wenn ich auf einen Namen klickt kommt man nicht zu der Person die man ausgewählt hat.

    Das Problem ist das der TableView die Namen sortiert bekommt in einem Array, soweit hab ich es hinbekommen.
    Allerdings ist das Array mit den Objekten ein anderes. ich habe also ein Array mit den Objekten der Personen und eins mit dem Namen. Jetzt will ich eigentlich nur noch das Array mit den Personen richtig sortieren, klappt aber irgendwie nicht.
    Code:
    //Bsp.:
    //Array mit den Objecten
    _AddressBook = ABAddressBookCreate();
    contactsList =  ABAddressBookCopyArrayOfAllPeople(_AddressBook);
            //und die will ich eigentlich nach dem Namen, Alphabetisch sortieren
    //Array mit Namen
    contactsListWithName = [self getArrayWithName:contactsList];
           // das Array ist Alphabetisch sortiert
    
    Finde die Geschichten mit den SortDescriptors momentan eh noch sehr kurios.
     
  4. Jamsven

    Jamsven London Pepping

    Dabei seit:
    21.11.07
    Beiträge:
    2.046
    Ein (mutable) Array mit Strings kannst per:

    Code:
    SEL sort = @selector( caseInsensitiveCompare: );
    [personMutableArray sortUsingSelector: sort];
    sortieren.
    Wenn andere Objekte sortiert werden müssen geht das etwas anders, du musst ja diese nach einem Attribut sortieren. Dafür gibts die netten NSSortDescriptor Objekte, ich sortiere hier Objekte nach ihrem Attribut NSString * name.
    Code:
    NSSortDescriptor *sortDescriptor =
    [[NSSortDescriptor alloc] initWithKey:@"name" 
    ascending:YES
    selector:@selector(caseInsensitiveCompare:)];
    
    [array sortUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];
    
    Schon fluppt die Sortierung.

    Hab das jetzt nach dem normalen Cocoa Framework erklärt, aber ich denke bei Cocoa Touch wirds nicht anders sein.
     
    #4 Jamsven, 03.02.09
    Zuletzt bearbeitet: 03.02.09
  5. AKubi

    AKubi Alkmene

    Dabei seit:
    08.12.08
    Beiträge:
    30
    Ne hat nicht funktioniert, hab jetzt allerdings in der Doku mal was nützliches gefunden.
    So werden alle nach ihren Vornamen sortiert.
    Code:
    ABAddressBookRef addressBook = ABAddressBookCreate();
    CFArrayRef people            = ABAddressBookCopyArrayOfAllPeople(addressBook);
    CFMutableArrayRef peopleMutable = CFArrayCreateMutableCopy(
                                              kCFAllocatorDefault,
                                              CFArrayGetCount(people),
                                              people
                                             );
     
    CFArraySortValues (peopleMutable,
                       CFRangeMake(0, CFArrayGetCount(peopleMutable)),
                       (CFComparatorFunction)ABPersonComparePeopleByName,
                       (void*)ABPersonGetSortOrdering()
                      );
     
    CFRelease(addressBook);
    CFRelease(people);
    CFRelease(peopleMutable);
    
     

Diese Seite empfehlen