你的實現是差不多吧。問題是,如果數組中的第一個元素與您正在搜索的float
不匹配,則該方法將返回false
而不查看數組的其餘部分。
如果有任何數組元素匹配,那麼您想要做的是返回true
,並且只有在查看整個數組並且它們都不匹配時才返回false
。
- (BOOL)searchInArray:(NSMutableArray *)allData forFloat:(float)dataToFind {
for (int i = 0; i < [allData count]; i++) {
if ([[allData objectAtIndex:i] floatValue] == dataToFind) {
return true;
}
}
return false;
}
一個更現代的/可讀的版本可能是這樣的:
- (BOOL)array:(NSMutableArray *)array containsFloat:(float)theFloat {
for (NSObject *object in array) {
if ([object isKindOfClass:[NSNumber class]]) {
NSNumber *number = (NSNumber *)object;
if (number.floatValue == theFloat) {
return YES;
}
}
}
return NO;
}
這個版本已經從原來的幾個變化:
- 它採用
YES
和NO
代替的true
和false
;這是建議用於Objective C代碼。
- 它使用for-each循環而不是按索引訪問數組;這更可讀。
- 它試圖獲取
floatValue
之前檢查數組中的每個元素以確保它是一個數字;如果你的數組包含的東西不是數字,這將防止錯誤發生。
如果您添加了關於問題的解釋以及解決問題的方法,這將是更好的答案。 – rmaddy
這將泛型添加到NSArray *數組參數規範中,因此如果您嘗試傳遞任何其他的NSArray,編譯器會吐出一個錯誤。 –
geowar