• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Sort Array with Arrays

AKubi

Alkmene
Registriert
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?
 

Amin Negm-Awad

Süsser Pfaffenapfel
Registriert
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.
 

AKubi

Alkmene
Registriert
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.
 

Jamsven

London Pepping
Registriert
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.
 
Zuletzt bearbeitet:

AKubi

Alkmene
Registriert
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);