Wie kann man ein nsmutablearray von nsmutablearrays mit NSStrings sortieren?
-
12-09-2019 - |
Frage
Gibt es eine einfache Möglichkeit, ein NSMutablearray von NSMutablearrays mit NSStrings zu sortieren?
Ich bin sicher, dass es eine einfache Methode dafür geben muss, aber ich kann es nicht finden.
Um zu verdeutlichen, möchte ich das erste Array alphabetisch nach dem NSString am Index 3 des Sub -Arrays sortieren.
Lösung
Ich habe niemanden tatsächlich mit anderen als "Verwenden Sie diese Funktion verwenden, sie herausfinden" gesehen. Hier finden Sie einen tatsächlichen Code, den Sie verwenden können.
Setzen Sie diese Kategorie am Ende Ihrer .h -Datei (oder überall und importieren Sie die .H, wo immer Sie sortieren müssen)
@interface NSString (SortCompare)
-(NSInteger)stringCompare:(NSString *)str2;
@end
Fügen Sie dies in die .m -Datei (oder die .m der .h Sie importieren).
@implementation NSString (SortCompare)
-(NSInteger) stringCompare:(NSString *)str2
{
return [(NSString *)self localizedCaseInsensitiveCompare:str2];
}
@end
Verwenden Sie nun die Sortier
Nsmutablearray:
[myArray sortUsingSelector:@selector(stringCompare:)];
Nsarray:
[myArray sortedArrayUsingSelector:@selector(stringCompare:)];
Andere Tipps
Wenn dein NSMutableArray
Enthält nur Objekte vom Typ NSString
, einfach tun:
[myMutableArray sortUsingSelector:@selector(compare:)];
Wie andere erwähnt haben, hat Nsarray keine compare:
Selektor, mit dem es sich sortieren kann, sodass Sie es selbst definieren müssen. Ich würde eine Kategorie auf NSArray mit einer Methode namens erstellen compare:(NSArray *)otherArray
(oder etwas, das besser beschreibt, was es tut) und verwenden das mit sortUsingSelector:
.
Abhängig von Ihren Bedürfnissen könnten Sie möglicherweise alle Ihre Saiten in ein großes Array stopfen, wenn Sie sie sortieren müssen, und dies stattdessen verwenden. Es könnte etwas weniger Code sein, um zu schreiben.
Sie können nach Schlüssel sortieren mit:
NSSortDescriptor *aSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"key" ascending:NO];
[yourArray sortUsingDescriptors:[NSArray arrayWithObject:aSortDescriptor]];