2012-02-06 11 views

Respuesta

45

Si quería simplemente obtener los valores mínimo y máximo de dobles:

NSNumber* min = [array valueForKeyPath:@"@min.self"]; 
NSNumber* max = [array valueForKeyPath:@"@max.self"]; 

Si quería simplemente ordenarlos:

// the array is mutable, so we can sort inline 
[array sortUsingSelector:@selector(compare:)]; 

La clase NSNumber va a clasificar bien simplemente usando compare:, pero si necesita hacer una clasificación más complicada, puede usar el método -sortUsingComparator: que toma un bloque t o haz la clasificación. También hay métodos en NSArray que devolverán las nuevas matrices que están ordenadas, en lugar de modificar la matriz actual. Consulte la documentación para NSArray y NSMutableArray para obtener más información.

+0

Lo que hace el valueForKeyPath función hacer? He estado buscando documentación sobre él, pero no puedo encontrar nada en NSArray o NSMutableArray. Quiero saber cuál es la cadena que se le pasa y cuál debe ser el formato. –

+2

@MikeKhan No es un método definido en 'NSArray'. Se define en el protocolo 'NSKeyValueCoding' que' NSObject' implementa. Puede encontrar la documentación aquí: https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Protocols/NSKeyValueCoding_Protocol/Reference/Reference.html#//apple_ref/occ/cat/NSKeyValueCoding –

+0

¿apple siempre usa @ en el literal de cadena para Keys? – DevilInDisguise

2

La clasificación es O (nlogn), por lo que si solo desea una vez máx. Y mín., No realice la clasificación. La mejor forma es ir a través de la matriz y comparar uno por uno y eso es lineal, es decir, O (n).

2
NSMutableArray * array=[[NSMutableArray alloc]initWithObjects:@"1",@"2",@"3",@"4",@"5",@"6", nil]; 

NSLog(@"Array:%@",array); 


int maxValue; 
for (NSString * strMaxi in array) { 
    int currentValue=[strMaxi intValue]; 
    if (currentValue > maxValue) { 
     maxValue=currentValue; 
    } 
} 
int miniValue; 
for (NSString * strMini in array) { 
    int currentValue=[strMini intValue]; 
    if (currentValue < miniValue) { 
     miniValue=currentValue; 
    } 
} 


NSLog(@"Maxi:%d",maxValue); 
NSLog(@"Mani:%d",miniValue); 
1

Si desea obtener el valor máximo en el uso de enteros esto: -

int max = [[array valueForKeyPath:@"@max.intValue"] intValue]; 

Si desea obtener el valor máximo en NSNumber utilizar este: -

NSNumber * max = [array valueForKeyPath:@"@max.intValue"]; 
Cuestiones relacionadas