2012-02-06 10 views

risposta

45

Se si voleva ottenere semplicemente il min e max raddoppia:

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

Se si voleva ordinarli semplicemente:

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

La classe NSNumber ordinerà ben semplicemente usando compare:, ma se hai bisogno di fare un ordinamento più complicato, puoi usare il metodo -sortUsingComparator: che accetta un blocco t o fai lo smistamento. Esistono anche metodi su NSArray che restituiscono i nuovi array ordinati, invece di modificare l'array corrente. Vedere la documentazione per NSArray e NSMutableArray per ulteriori informazioni.

+0

Che cosa significa la valueForKeyPath funzione? Sono stato alla ricerca di documentazione su di esso, ma non riesco a trovare nulla in NSArray o NSMutableArray. Voglio sapere qual è la stringa che gli viene passata e quale dovrebbe essere il formato di essa. –

+2

@MikeKhan Non è un metodo definito su 'NSArray'. È definito nel protocollo 'NSKeyValueCoding' che implementa' NSObject'. È possibile trovare la documentazione qui: https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Protocols/NSKeyValueCoding_Protocol/Reference/Reference.html#//apple_ref/occ/cat/NSKeyValueCoding –

+0

Apple usa sempre @ nella stringa letterale per Keys? – DevilInDisguise

2

L'ordinamento è O (nlogn), quindi se si desidera solo max e min una volta, si prega di non effettuare l'ordinamento. Il modo migliore è passare attraverso l'array e confrontarli uno per uno, che è lineare, cioè 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

Se si desidera ottenere valore massimo in uso integer questo: -

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

Se si desidera ottenere valore massimo in NSNumber utilizzare questo: -

NSNumber * max = [array valueForKeyPath:@"@max.intValue"]; 
Problemi correlati