Comment trier un tableau rempli de [UIFont familyNames]
dans l'ordre alphabétique?Comment trier un NSArray par ordre alphabétique?
Répondre
L'approche est simple, de fournir un sélecteur de tri (Apple's documentation pour plus de détails)
Objective-C
sortedArray = [anArray sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
Swift
let descriptor: NSSortDescriptor = NSSortDescriptor(key: "YourKey", ascending: true, selector: "localizedCaseInsensitiveCompare:")
let sortedResults: NSArray = temparray.sortedArrayUsingDescriptors([descriptor])
d'Apple fournit plusieurs sélecteurs pour le tri alphabétique:
compare:
caseInsensitiveCompare:
localizedCompare:
localizedCaseInsensitiveCompare:
localizedStandardCompare:
Swift
var students = ["Kofi", "Abena", "Peter", "Kweku", "Akosua"]
students.sort()
print(students)
// Prints "["Abena", "Akosua", "Kofi", "Kweku", "Peter"]"
Les autres réponses fournies ici mentionnent l'utilisation @selector (localizedCaseInsensitiveCompare :) Cela fonctionne très bien pour un tableau de NSString, si vous voulez étendre cela à un autre type d'objet, et trier ces objets selon une propriété « nom », vous devez le faire à la place:
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
sortedArray=[anArray sortedArrayUsingDescriptors:@[sort]];
Vos objets seront triés en fonction de la propriété du nom de ces objets.
Si vous voulez que le tri soit insensible à la casse, vous devez définir le descripteur comme celui-ci
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES selector:@selector(caseInsensitiveCompare:)];
+1, merci. C'est drôle le cas d'utilisation le plus commun que la réponse acceptée. –
ce genre de lettres majuscules d'abord, puis les petites lettres – HarshIT
J'ai édité ma réponse pour inclure le tri insensible à la casse –
Une façon plus puissante de trier une liste de NSString à utiliser des choses comme NSNumericSearch:
NSArray *sortedArrayOfString = [arrayOfString sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
return [(NSString *)obj1 compare:(NSString *)obj2 options:NSNumericSearch];
}];
combiné avec SortDescriptor, qui donne quelque chose comme
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]];
-(IBAction)SegmentbtnCLK:(id)sender
{ [self sortArryofDictionary];
[self.objtable reloadData];}
-(void)sortArryofDictionary
{ NSSortDescriptor *sorter;
switch (sortcontrol.selectedSegmentIndex)
{case 0:
sorter=[[NSSortDescriptor alloc]initWithKey:@"Name" ascending:YES];
break;
case 1:
sorter=[[NSSortDescriptor alloc]initWithKey:@"Age" ascending:YES];
default:
break; }
NSArray *sortdiscriptor=[[NSArray alloc]initWithObjects:sorter, nil];
[arr sortUsingDescriptors:sortdiscriptor];
}
Formidable laid pour être honnête – Mutawe
utilisation ci-dessous le code pour le tri par ordre alphabétique:
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);
Ci-dessous journal de la console:
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
)
Une autre méthode facile à trier un tableau de chaînes consiste en utilisant la propriété NSString description
cette façon :
NSSortDescriptor *valueDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"description" ascending:YES];
arrayOfSortedStrings = [arrayOfNotSortedStrings sortedArrayUsingDescriptors:@[valueDescriptor]];
Cela semble un peu inutile; il n'y a aucune raison de trier les chaînes de cette façon (et il y a probablement un coup de performance pour le faire), et pour d'autres objets, sa propriété de description est rarement utile pour le tri. – mah
Ceci a déjà de bonnes réponses pour la plupart purp oses, mais je vais ajouter le mien qui est plus spécifique.
En anglais, normalement quand nous alphabétisons, nous ignorons le mot "the" au début d'une phrase. Ainsi, les «États-Unis» seraient classés sous «U» et non «T».
Cela fait cela pour vous.
Il serait probablement préférable de les mettre dans les catégories.
// Sort an array of NSStrings alphabetically, ignoring the word "the" at the beginning of a string.
-(NSArray*) sortArrayAlphabeticallyIgnoringThes:(NSArray*) unsortedArray {
NSArray * sortedArray = [unsortedArray sortedArrayUsingComparator:^NSComparisonResult(NSString* a, NSString* b) {
//find the strings that will actually be compared for alphabetical ordering
NSString* firstStringToCompare = [self stringByRemovingPrecedingThe:a];
NSString* secondStringToCompare = [self stringByRemovingPrecedingThe:b];
return [firstStringToCompare compare:secondStringToCompare];
}];
return sortedArray;
}
// Remove "the"s, also removes preceding white spaces that are left as a result. Assumes no preceding whitespaces to start with. nb: Trailing white spaces will be deleted too.
-(NSString*) stringByRemovingPrecedingThe:(NSString*) originalString {
NSString* result;
if ([[originalString substringToIndex:3].lowercaseString isEqualToString:@"the"]) {
result = [[originalString substringFromIndex:3] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
}
else {
result = originalString;
}
return result;
}
- 1. Comment trier un groupe de fichiers par ordre alphabétique, récursivement
- 2. Trier le nuage de tags par ordre alphabétique dans acts_as_taggable_on_steroids
- 3. Tri des données numériques par ordre alphabétique
- 4. Trier NSArray par NSDate, aujourd'hui
- 5. Comment comparer 2 chaînes par ordre alphabétique
- 6. Afficher les données par ordre alphabétique
- 7. C# Comment trier les colonnes d'une grille de données par ordre alphabétique?
- 8. Comment trier les en-têtes de colonne dans une grille de données par ordre alphabétique? C#
- 9. Trier les données MultiValue numériquement ou par ordre alphabétique - LINQ to SQL et C# 3
- 10. Comment trouver le caractère suivant par ordre alphabétique?
- 11. NSArray de dates trier
- 12. Fonction MySQL pour classer les chaînes par ordre alphabétique
- 13. Comment faire pour trier par ordre alphabétique les valeurs dans une boîte plusieurs-à-plusieurs django-admin?
- 14. Comment trier un tableau de chaînes?
- 15. Impression d'une légende de lettre une seule fois et des éléments correspondants par ordre alphabétique
- 16. PHP (dossier) Liste des fichiers dans un ordre alphabétique?
- 17. Comment trier dans un ordre spécifique généré dynamiquement dans mySQL?
- 18. Tri des valeurs de la zone de liste déroulante par ordre alphabétique
- 19. Existe-t-il une fonction smarty spécifique pour classer par ordre alphabétique un tableau?
- 20. Retourne les enregistrements ordonnés par ordre alphabétique par une certaine lettre dans Sql Server
- 21. Trier par une option forcée en haut de la liste
- 22. Comment créer une documentation Java par ordre d'apparition?
- 23. Les dossiers de solution dans VS2008 ne sont pas classés par ordre alphabétique
- 24. Recherche des chaînes "les plus proches" dans une liste Python (par ordre alphabétique)
- 25. comment trier par ordre croissant xsl croissant avec les 0s dernières
- 26. Trier NSFileManager Résultats
- 27. PHP MySQL Ordre par deux colonnes
- 28. ASP.NET TreeView trier
- 29. Ordre SQL par problème-Suite
- 30. NHibernate Ordre Par question
Le lien de documentation est obsolète, l'exemple de code n'est pas vraiment suffisant pour réellement trier le tableau. localizedCaseInsensitiveCompare: doit être défini d'une manière ou d'une autre. –
J'ai mis à jour le lien. Merci d'avoir fait remarquer cela. localizedCaseInsensitiveCompare: est une méthode de NSString et devrait être suffisante pour trier un tableau de chaînes. –
Et cela peut être facilement appliqué à un tableau contenant des objets personnalisés (pas seulement NSString). Vous devez juste vous assurer que tous les objets à l'intérieur de votre tableau ont implémenté le message que le sélecteur spécifie. Ensuite, à l'intérieur de ce message, vous appelez simplement la comparaison NSString pour les propriétés de votre objet que vous souhaitez comparer. – Luka