Wie kann ich ein Array sortieren, das mit [UIFont familyNames]
in alphabetischer Reihenfolge?
Antworten
Zu viele Anzeigen?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"]"
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:)];
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]];
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]];
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
)
- See previous answers
- Weitere Antworten anzeigen