在数组中查找float

时间:2016-03-13 23:17:20

标签: ios objective-c nsmutablearray

Objective-C中的任何函数是否与PHP中的array_search类似?我试图制作一个应该有效的,但逻辑不对。

-(BOOL)searchInArray :(NSMutableArray *)allData :(float)dataToFind {
    BOOL *temp = false;

    for(int i=0;i<=[allData count];i++){
        if([[allData objectAtIndex:i] floatValue] == dataToFind){
            return true;
        } else {
            return false;
        }
    }
    return temp;
}

2 个答案:

答案 0 :(得分:2)

您的实施几乎是正确的。问题是,如果数组中的第一个元素与您正在搜索的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;
}

此版本与原版有一些变化:

  • 它使用YESNO代替truefalse;建议用于Objective C代码。
  • 它使用for-each循环而不是通过索引访问数组;这更具可读性。
  • 在尝试获取floatValue之前,它会检查数组的每个元素以确保它是一个数字;如果您的数组包含不是数字的内容,这将防止发生错误。

答案 1 :(得分:0)

试试这个:

- (BOOL)searchInArray:(NSArray<NSNumber *> *)array forFloat:(float)floatToFind
{
    for (NSNumber *number in array) {
        if (number.floatValue == floatToFind) {
            return YES;
        }
    }
    return NO;
}