通过int值过滤NSArray和NSDictionary

时间:2014-01-09 00:32:42

标签: ios objective-c nsarray nsdictionary nspredicate

我有以下NSArray:

(
        {
        establecimiento = 15;
        internet = 500;
    },
        {
        establecimiento = 0;
        internet = 1024;
    },
        {
        establecimiento = 24;
        internet = 300;
    }
)

我需要过滤establecimiento < 10的数组。

我正在尝试这个:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"establecimiento = %@", [NSNumber numberWithInt:self.establecimientoFiltro]];

其中self.establecimientoFiltro是一个值为10的int

但我的结果是一个空数组。

希望能够清楚地回答我的问题,并提前感谢您的答案。

此致 维克多

2 个答案:

答案 0 :(得分:1)

您的谓词会检查该值是否等于十,不小于十。您收到一个空数组,因为您提供给我们的数组不包含establecimiento键返回值为10的字典。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"establecimiento < 10"];

答案 1 :(得分:0)

您应该blocks使用Predicate来实现此目标。

我们假设您的数组位于myArray。现在使用您选择的范围制作谓词。截至目前,您希望establecimientoFiltro小于10。

NSPredicate *keyPred = [NSPredicate predicateWithBlock:^BOOL(id  obj, NSDictionary *bindings) {
    NSRange myRange = NSMakeRange (0, 9);
    NSInteger rangeKey = [[obj valueForKey:@"establecimientoFiltro"]integerValue];
    if (NSLocationInRange(rangeKey, myRange)) {
        // found
        return YES;
    } else {
        // not found
        return NO;
    }
}];

NSArray *filterArray = [myArray filteredArrayUsingPredicate:keyPred];
NSLog(@"%@", filterArray);

您可以在filteredArray

中过滤结果

希望这是最有效的&amp;对你有帮助。