从NSArray中找到最低的NSInteger

时间:2015-09-02 17:49:25

标签: ios objective-c arrays nsnumber nsinteger

我正在尝试返回数组中的最小数字。

参数:arrayOfNumbers - 一组NSNumbers。

返回:数组中作为NSInteger的最小数字。

到目前为止我的代码没有给我任何错误,但没有通过单元测试。我做错了什么?

- (NSInteger) lowestNumberInArray:(NSArray *)arrayOfNumbers {

    NSNumber* smallest = [arrayOfNumbers valueForKeyPath:@"@min.self"];
    for (NSInteger i = 0; i < arrayOfNumbers.count; i++) {
        if (arrayOfNumbers[i] < smallest) {
            smallest = arrayOfNumbers[i];
        }
    }

    NSInteger smallestValue = [smallest integerValue];
    return smallestValue;

}

这是单元测试:

- (void) testThatLowestNumberIsReturned {
    NSInteger lowestNumber = [self.handler lowestNumberInArray:@[@3, @8, @-4, @0]];
    XCTAssertEqual(lowestNumber, -4, @"Lowest number should be -4.");

    lowestNumber = [self.handler lowestNumberInArray:@[@83, @124, @422, @953, @1004, @9532, @-1000]];
    XCTAssertEqual(lowestNumber, -1000, @"Lowest number should be -1000.");    
}

2 个答案:

答案 0 :(得分:3)

此方法

NSNumber* smallest = [arrayOfNumbers valueForKeyPath:@"@min.self"];

已经确定了数组中的最小数字,因此方法中的循环是多余的(除了明显错误之外,就像@vikingosegundo注意到的那样)。

答案 1 :(得分:2)

您正在将对象与c类型进行比较,从而将im指针地址与int进行比较。

除了使用KVC collection operator @min.self(见Glorfindel答案)之外,您的最小值已经是最小的,以下代码显示正确的比较

if (arrayOfNumbers[i] < smallest)

应该是

if ([arrayOfNumbers[i] compare:smallest] == NSOrderingAscending)

if ([arrayOfNumbers[i] integerValue] < [smallest integerValue])