precio - como usar la cocoa
¿Cómo agregar estos objetos con nombre a la matriz por este orden? (4)
Tengo un objeto con nombre, al igual que el button 1 , button 2 , button 11 ,button 111
, quiero agregar este objeto a una matriz en este orden: button 1 ,button 2 , button 11 , button 111
, pero encontré que estos objetos pueden agregar la matriz en este orden: button 1 , button 11,button 111 , button 2
¿Por qué? ¡Gracias por su respuesta!
He usado la combinación NSNumericSearch | NSCaseInsensitiveSearch para obtener el mejor resultado. Espero que alguien salve su vida en Googeling. Verifica los resultados
NSArray * array =
[NSArray
arrayWithObjects:
[NSDictionary dictionaryWithObject: @"C3" forKey: @"sort"],
[NSDictionary dictionaryWithObject: @"C1" forKey: @"sort"],
[NSDictionary dictionaryWithObject: @"C100" forKey: @"sort"],
[NSDictionary dictionaryWithObject: @"Z0" forKey: @"sort"],
[NSDictionary dictionaryWithObject: @"Z1000" forKey: @"sort"],
[NSDictionary dictionaryWithObject: @"M" forKey: @"sort"],
[NSDictionary dictionaryWithObject: @"m" forKey: @"sort"],
[NSDictionary dictionaryWithObject: @"M" forKey: @"sort"],
[NSDictionary dictionaryWithObject: @"m" forKey: @"sort"],
[NSDictionary dictionaryWithObject: @"1A4" forKey: @"sort"],
[NSDictionary dictionaryWithObject: @"A2" forKey: @"sort"],
[NSDictionary dictionaryWithObject: @"A12" forKey: @"sort"],
[NSDictionary dictionaryWithObject: @"B4" forKey: @"sort"],
[NSDictionary dictionaryWithObject: @"B6" forKey: @"sort"],
[NSDictionary dictionaryWithObject: @"B100" forKey: @"sort"],
[NSDictionary dictionaryWithObject: @"B1" forKey: @"sort"],
[NSDictionary dictionaryWithObject: @"1a4" forKey: @"sort"],
nil];
NSSortDescriptor * descriptor =
[NSSortDescriptor
sortDescriptorWithKey: @"sort"
ascending: YES
comparator:
^NSComparisonResult(id obj1, id obj2)
{
return [obj1 compare: obj2 options: NSNumericSearch|NSCaseInsensitiveSearch];
}];
NSArray * sortedArray =
[array
sortedArrayUsingDescriptors:
[NSArray arrayWithObject: descriptor]];
NSLog(@"Original array:");
for(NSDictionary * value in array)
NSLog(@"%@", [value objectForKey: @"sort"]);
NSLog(@"Sorted array:");
for(NSDictionary * value in sortedArray)
NSLog(@"%@", [value objectForKey: @"sort"]);
Resultado
Matriz original:
C3
C1
C100
Z0
Z1000
M
m
M
m
1A4
A2
A12
B4
B6
B100
B1
1a4
Array ordenado:
1A4
1a4
A2
A12
B1
B4
B6
B100
C1
C3
C100
M
m
M
m
Z0
Z1000
De la misma manera que si tuviera archivos con este nombre en Finder, ordenarían de la misma manera.
Para obtener un orden correcto, debe nombrarlos botón 001, botón 002, botón 011, etc.
Alternativamente, tendrás que escribir tus propias descripciones de clasificación.
Consulte aquí para NSMutableArray sortUsingSelector: y aquí para NSSortDescriptor
Use la opción NSNumericSearch
en su comparación de clasificación.
Puede usar este código para ordenar la matriz. Use NSNumericSearch para buscar el valor numérico en cadena.
NSArray * ary = [[NSArray alloc] initWithObjects:@"button 1" , @"button 2" , @"button 11" ,@"button 111", nil];
ary = [ary sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
return [(NSString *)obj1 compare:(NSString *)obj2 options:NSNumericSearch];
}];
NSLog(@"ary : %@", ary);
Y la pantalla de registro:
ary : (
"button 1",
"button 2",
"button 11",
"button 111"
)