382 Stimmen

Wie kann man ein NSArray alphabetisch sortieren?

Wie kann ich ein Array sortieren, das mit [UIFont familyNames] in alphabetischer Reihenfolge?

735voto

Thomas Zoechling Punkte 33740

Der einfachste Ansatz ist, einen Sortierselektor ( Apples Dokumentation für Details)

Objektiv-C

sortedArray = [anArray sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];

Schnell

let descriptor: NSSortDescriptor = NSSortDescriptor(key: "YourKey", ascending: true, selector: "localizedCaseInsensitiveCompare:")
let sortedResults: NSArray = temparray.sortedArrayUsingDescriptors([descriptor])

Apple bietet mehrere Selektoren für die alphabetische Sortierung:

  • compare:
  • caseInsensitiveCompare:
  • localizedCompare:
  • localizedCaseInsensitiveCompare:
  • localizedStandardCompare:

Schnell

var students = ["Kofi", "Abena", "Peter", "Kweku", "Akosua"]
students.sort()
print(students)
// Prints "["Abena", "Akosua", "Kofi", "Kweku", "Peter"]"

Referenz

281voto

JP Hribovsek Punkte 6667

Die anderen Antworten, die hier gegeben werden, erwähnen die Verwendung von @selector(localizedCaseInsensitiveCompare:) Dies funktioniert hervorragend für ein Array von NSString, aber wenn Sie dies auf einen anderen Objekttyp erweitern und diese Objekte nach einer 'name'-Eigenschaft sortieren möchten, sollten Sie stattdessen dies tun:

NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
sortedArray=[anArray sortedArrayUsingDescriptors:@[sort]];

Ihre Objekte werden nach der Namenseigenschaft dieser Objekte sortiert.

Wenn Sie möchten, dass bei der Sortierung die Groß- und Kleinschreibung keine Rolle spielt, müssen Sie den Deskriptor wie folgt festlegen

NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES selector:@selector(caseInsensitiveCompare:)];

29voto

Ben G Punkte 3925

Eine leistungsfähigere Art, eine Liste von NSString zu sortieren, um Dinge wie NSNumericSearch zu verwenden:

NSArray *sortedArrayOfString = [arrayOfString sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
            return [(NSString *)obj1 compare:(NSString *)obj2 options:NSNumericSearch];
        }];

Kombiniert mit SortDescriptor würde das etwas ergeben wie :

NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES comparator:^NSComparisonResult(id obj1, id obj2) {
        return [(NSString *)obj1 compare:(NSString *)obj2 options:NSNumericSearch];
    }];
NSArray *sortedArray = [anArray sortedArrayUsingDescriptors:[NSArray arrayWithObject:sort]];

12voto

Lisarien Punkte 1106

Eine weitere einfache Methode, ein Array von Strings zu sortieren, besteht in der Verwendung der NSString description Eigenschaft auf diese Weise:

NSSortDescriptor *valueDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"description" ascending:YES];
arrayOfSortedStrings = [arrayOfNotSortedStrings sortedArrayUsingDescriptors:@[valueDescriptor]];

10voto

Jayprakash Dubey Punkte 34167

Verwenden Sie den unten stehenden Code, um in alphabetischer Reihenfolge zu sortieren:

    NSArray *unsortedStrings = @[@"Verdana", @"MS San Serif", @"Times New Roman",@"Chalkduster",@"Impact"];

    NSArray *sortedStrings =
    [unsortedStrings sortedArrayUsingSelector:@selector(compare:)];

    NSLog(@"Unsorted Array : %@",unsortedStrings);        
    NSLog(@"Sorted Array : %@",sortedStrings);

Nachfolgend das Konsolenprotokoll:

2015-04-02 16:17:50.614 ToDoList[2133:100512] Unsorted Array : (
    Verdana,
    "MS San Serif",
    "Times New Roman",
    Chalkduster,
    Impact
)

2015-04-02 16:17:50.615 ToDoList[2133:100512] Sorted Array : (
    Chalkduster,
    Impact,
    "MS San Serif",
    "Times New Roman",
    Verdana
)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X