2012-02-06 94 views

回答

45

如果你想簡單地得到最小和最大雙打:

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

如果你想簡單地對它們進行排序:

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

NSNumber類將排序很好只是使用compare:,但如果你需要做更復雜的排序,你可以使用-sortUsingComparator:方法,它需要一個塊t o做分類。在NSArray上也有方法,它將返回排序的新數組,而不是修改當前數組。有關更多信息,請參閱NSArrayNSMutableArray的文檔。

+0

什麼的valueForKeyPath功能呢?我一直在尋找它的文檔,但我無法找到NSArray或NSMutableArray中的任何東西。我想知道傳遞給它的字符串是什麼,它的格式應該是什麼。 – 2012-02-18 17:48:52

+2

@MikeKhan它不是'NSArray'上定義的方法。它在'NSObject'實現的'NSKeyValueCoding'協議中定義。你可以在這裏找到文檔:https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Protocols/NSKeyValueCoding_Protocol/Reference/Reference.html#//apple_ref/occ/cat/NSKeyValueCoding – 2012-02-18 23:06:45

+0

蘋果總是在字符串文字中使用@鍵嗎? – DevilInDisguise 2015-07-16 20:39:45

2

排序是O(nlogn),所以如果你只想要max和min一次,請不要排序。最好的方法是遍歷數組並逐個比較,即線性,即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

如果你想在整數使用,以獲得最大的價值是: -

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

如果你想在NSNumber的最大值使用: -

NSNumber * max = [array valueForKeyPath:@"@max.intValue"]; 
相關問題