有沒有一種方法可以在iOS中獲取兩個數的NSMutableArray的最大值和最小值。我正在尋找一個已經存在的方法,而不是我自己排列數組。如果有一種方法可以讓我在API中進行編排,以便對我感興趣的數組進行排序。是否有一種方法來獲取NSMutableArray的最大值和最小值
謝謝
有沒有一種方法可以在iOS中獲取兩個數的NSMutableArray的最大值和最小值。我正在尋找一個已經存在的方法,而不是我自己排列數組。如果有一種方法可以讓我在API中進行編排,以便對我感興趣的數組進行排序。是否有一種方法來獲取NSMutableArray的最大值和最小值
謝謝
如果你想簡單地得到最小和最大雙打:
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
上也有方法,它將返回排序的新數組,而不是修改當前數組。有關更多信息,請參閱NSArray和NSMutableArray的文檔。
排序是O(nlogn),所以如果你只想要max和min一次,請不要排序。最好的方法是遍歷數組並逐個比較,即線性,即O(n)。
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);
如果你想在整數使用,以獲得最大的價值是: -
int max = [[array valueForKeyPath:@"@max.intValue"] intValue];
如果你想在NSNumber的最大值使用: -
NSNumber * max = [array valueForKeyPath:@"@max.intValue"];
什麼的valueForKeyPath功能呢?我一直在尋找它的文檔,但我無法找到NSArray或NSMutableArray中的任何東西。我想知道傳遞給它的字符串是什麼,它的格式應該是什麼。 – 2012-02-18 17:48:52
@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
蘋果總是在字符串文字中使用@鍵嗎? – DevilInDisguise 2015-07-16 20:39:45