返回数组中的最小数字

时间:2015-09-02 03:31:15

标签: ios objective-c arrays

在不知道范围和数组无序的情况下,因此无需按升序对数组进行排序并获取第一个元素

所以我有这个方法:

- (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;
}

4 个答案:

答案 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

得到了这个答案

Finding maximum numeric value in NSArray

答案 3 :(得分:0)

你的问题有点令人困惑。你怎么不知道阵列的大小?数组是否继续添加值?

- 如果数组一直在随机时间添加值,则应创建通知。然后,只要添加了新号码,请比较新添加的号码,看看这是否是新的最低号码。

希望有所帮助!!!