簡體   English   中英

從 NSArray 中找到最低的 NSInteger

[英]Finding the lowest NSInteger from NSArray

我試圖返回數組中的最低數字。

參數: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.");    
}

這種方法

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

將已經確定數組中的最小數字,因此該方法內的循環是多余的(除了完全錯誤之外,正如@vikingosegundo 所注意到的那樣)。

您正在將對象與 c 類型進行比較,導致 im 指針地址與 int 進行比較。

除了您最小的已經是最小的這一事實之外,因為您使用了KVC 集合運算符@min.self (請參閱 Glorfindel 答案),以下代碼顯示了正確的比較

if (arrayOfNumbers[i] < smallest)

應該

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

或者

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM