[英]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.