¿Cómo puedo ordenar una matriz con [UIFont familyNames]
en orden alfabético?¿Cómo ordenar un NSArray alfabéticamente?
Respuesta
El enfoque más simple es, para proporcionar un selector de tipo (Apple's documentation para más detalles)
Objective-C
sortedArray = [anArray sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
Swift
let descriptor: NSSortDescriptor = NSSortDescriptor(key: "YourKey", ascending: true, selector: "localizedCaseInsensitiveCompare:")
let sortedResults: NSArray = temparray.sortedArrayUsingDescriptors([descriptor])
de Apple proporciona varios selectores para la clasificación alfabética:
compare:
caseInsensitiveCompare:
localizedCompare:
localizedCaseInsensitiveCompare:
localizedStandardCompare:
Swift
var students = ["Kofi", "Abena", "Peter", "Kweku", "Akosua"]
students.sort()
print(students)
// Prints "["Abena", "Akosua", "Kofi", "Kweku", "Peter"]"
Las otras respuestas proveídas aquí mencionan el uso de @selector (localizedCaseInsensitiveCompare :) Esto funciona muy bien para una serie de NSString, sin embargo, si desea ampliar esto a otro tipo de objeto, y clasificar los objetos de acuerdo con una propiedad 'nombre', debe hacerse lo siguiente:
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
sortedArray=[anArray sortedArrayUsingDescriptors:@[sort]];
Sus objetos se ordenarán de acuerdo con la propiedad del nombre de esos objetos.
Si desea que la clasificación sea sensible a mayúsculas, lo que se necesita para establecer el descriptor como esto
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES selector:@selector(caseInsensitiveCompare:)];
+1, gracias. Es curioso que este es el caso de uso más común que la respuesta aceptada. –
esto ordena letras mayúsculas primero y luego letras pequeñas – HarshIT
He editado mi respuesta para incluir la clasificación insensible a mayúsculas –
Una forma más poderosa de ordenar una lista de NSString a usar cosas como NSNumericSearch:
NSArray *sortedArrayOfString = [arrayOfString sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
return [(NSString *)obj1 compare:(NSString *)obj2 options:NSNumericSearch];
}];
combinado con SortDescriptor, que daría algo así como:
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];
}
Formateo feo para ser honesto – Mutawe
uso por debajo de código para clasificar en orden alfabético:
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);
A continuación se muestra registro de la consola:
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
)
Otro método fácil para ordenar una matriz de cadenas consiste utilizando el description
propiedad NSString esta manera :
NSSortDescriptor *valueDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"description" ascending:YES];
arrayOfSortedStrings = [arrayOfNotSortedStrings sortedArrayUsingDescriptors:@[valueDescriptor]];
Eso parece un poco inútil; no hay ninguna razón para ordenar cadenas de esta manera (y probablemente haya un golpe de rendimiento para hacerlo), y para otros objetos, su propiedad de descripción rara vez es útil para fines de clasificación. – mah
Esto ya tiene buenas respuestas para la mayoría de los purp oses, pero agregaré el mío que es más específico.
En inglés, normalmente cuando escribimos en orden alfabético, ignoramos la palabra "the" al comienzo de una frase. Entonces "Los Estados Unidos" se ordenarían bajo "U" y no "T".
Esto lo hace por usted.
Probablemente sea mejor poner estos en categorías.
// 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. ¿Cómo ordenar NSArray con objetos de diccionario alfabéticamente?
- 2. ¿Cómo puedo ordenar un NSMutableArray alfabéticamente?
- 3. Ordenar JSON alfabéticamente
- 4. Ordenar argparse ayuda alfabéticamente
- 5. cómo ordenar un NSArray usando compare: opciones
- 6. Codeigniter - Ordenar registro activo alfabéticamente
- 7. ¿Cómo puedo ordenar enum alfabéticamente en Java?
- 8. ¿Ordenar números en NSArray?
- 9. Ordenar NSArray contiene AAO
- 10. de ordenar alfabéticamente una SelectList en MVC
- 11. Ordenar la lista desplegable alfabéticamente en AngularJS
- 12. ¿Puedo ordenar las pestañas en Eclipse alfabéticamente?
- 13. XSLT Ordenar alfabéticamente y numéricamente Problema
- 14. Ordenar la colección de Backbone alfabéticamente
- 15. Ordenar matriz por valor alfabéticamente php
- 16. matriz PHP ordenar alfabéticamente utilizando un valor subarreglo
- 17. ¿Cómo ordenar los caracteres de una cadena alfabéticamente?
- 18. Ordenar NSArray con la costumbre objetos
- 19. ¿La mejor manera de ordenar un NSArray de objetos NSDictionary?
- 20. ¿Cómo extiendo un NSArray?
- 21. Cómo ordenar un IEnumerable <string>
- 22. ¿Cómo puedo mantener un hashset ordenado alfabéticamente?
- 23. Ordenar un array primero por la longitud después alfabéticamente en Java
- 24. Obtener un NSArray de un solo atributo de un NSArray
- 25. Ordenar NSArray de objetos personalizados por sus propiedades NSDate
- 26. ¿Cómo puedo ordenar una matriz de cadenas alfabéticamente cuando las cadenas contienen åäö?
- 27. ¿Cómo ordenar alfabéticamente los valores en una caja de django-admin de muchos a muchos?
- 28. ¿Cómo ordenar los proyectos alfabéticamente por nombre en PyDev Package Explorer en Eclipse?
- 29. ¿Cómo ordenar los atributos de HTML alfabéticamente en Visual Studio automáticamente?
- 30. Cómo comparar 2 cadenas alfabéticamente
El enlace de la documentación está desactualizado, el código de muestra no es realmente suficiente para ordenar realmente la matriz. localizedCaseInsensitiveCompare: necesita ser definido de alguna manera. –
He actualizado el enlace. Gracias por señalar eso. localizedCaseInsensitiveCompare: es un método de NSString y debería ser suficiente para ordenar una matriz de cadenas. –
Y esto se puede aplicar fácilmente a una matriz que contiene cualquier objeto personalizado (no solo NSString). Solo tiene que asegurarse de que todos los objetos dentro de su matriz hayan implementado el mensaje que especifica el selector. Luego, dentro de este mensaje, simplemente llame a la comparación NSString para las propiedades de su objeto que desea comparar. – Luka