在不知道范围和数组无序的情况下,因此无需按升序对数组进行排序并获取第一个元素
所以我有这个方法:
- (NSInteger) lowestNumberInArray:(NSArray *)arrayOfNumbers {
参数:NSNumbers数组
返回:数组中作为NSInteger的最小数字
我正在考虑循环遍历数组的for循环,一旦找到最小的数字,然后将该数字存储到NSInteger中。但是,我不知道数组值的范围,我不知道什么是我最大和最小的数字。我查看了NSArray和NSMutableArray文档,但没有找到任何可用于返回最小值的方法。对你的帮助表示感谢! :)
- (NSInteger) lowestNumberInArray:(NSArray *)arrayOfNumbers {
smallest = equalBiggestNumber;
for (NSInteger i = 0; i < arrayOfNumbers.count; i++) {
if (arrayOfNumbers[i] < smallest) {
smallest = arrayOfNumbers[i];
}
return 0;
}
答案 0 :(得分:3)
您可以使用KVC和collection operators:
max_doublings
如果数组元素是对象并且您想要最小的属性值,则在关键路径中使用该属性的键而不是“self”。碰巧的是,NSNumber* smallest = [arrayOfNumbers valueForKeyPath:@"@min.self"];
是所有对象的“属性”,self
可以直接比较,因此您可以在那里使用“self”。
答案 1 :(得分:2)
你不需要。 smallest
的初始值可以是任意数量的numberArray。你可以:
smallest = arrayOfNumbers[0];
或者如果你真的想:
smallest = NSIntegerMax;
然后执行for
循环。如果为数组中的第一个对象指定最小值,则可以在循环中跳过它。
NSInteger smallest = arrayOfNumbers[0];
for (NSInteger i = 1; i < arrayOfNumbers.count; i++) {
if (arrayOfNumbers[i] < smallest) {
smallest = arrayOfNumbers[i];
}
}
return smallest;
}
答案 2 :(得分:1)
您可以尝试一下
int max = [[numbers valueForKeyPath:@"@max.intValue"] intValue];
或强>
NSNumber * max = [numbers valueForKeyPath:@"@max.intValue"];
with numbers as an NSArray
版本1:对数组进行排序:
NSArray *sorted1 = [numbers sortedArrayUsingSelector:@selector(compare:)];
// 1.585 seconds
版本2:键值编码,使用“doubleValue”:
NSNumber *max=[numbers valueForKeyPath:@"@max.doubleValue"];
NSNumber *min=[numbers valueForKeyPath:@"@min.doubleValue"];
// 0.778 seconds
第3版:键值编码,使用“self”:
NSNumber *max=[numbers valueForKeyPath:@"@max.self"];
NSNumber *min=[numbers valueForKeyPath:@"@min.self"];
// 0.390 seconds
版本4:显式循环:
float xmax = -MAXFLOAT;
float xmin = MAXFLOAT;
for (NSNumber *num in numbers) {
float x = num.floatValue;
if (x < xmin) xmin = x;
if (x > xmax) xmax = x;
}
// 0.019 seconds
第5版:阻止枚举:
__block float xmax = -MAXFLOAT;
__block float xmin = MAXFLOAT;
[numbers enumerateObjectsUsingBlock:^(NSNumber *num, NSUInteger idx, BOOL *stop) {
float x = num.floatValue;
if (x < xmin) xmin = x;
if (x > xmax) xmax = x;
}];
// 0.024 seconds
我从这个链接Finding the smallest and biggest value in NSArray of NSNumbers
得到了这个答案答案 3 :(得分:0)
你的问题有点令人困惑。你怎么不知道阵列的大小?数组是否继续添加值?
- 如果数组一直在随机时间添加值,则应创建通知。然后,只要添加了新号码,请比较新添加的号码,看看这是否是新的最低号码。
希望有所帮助!!!