使用 NSDictionary 按 int 值过滤 NSArray

Posted

技术标签:

【中文标题】使用 NSDictionary 按 int 值过滤 NSArray【英文标题】:filter NSArray with NSDictionary by int value 【发布时间】:2014-01-09 00:32:41 【问题描述】:

我有以下 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 是一个 int 值:10

但是我有一个空数组。

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

问候, 维克多

【问题讨论】:

如果你想要 @user3175572 在下面查看我的答案以获得灵活的输出。 而且不需要把你的号码转换成NSNumber——你可以直接用%d这个号码。 看看下面的答案,如果这让您感到困惑,请告诉我。好的 您只需要在谓词格式中定义适当的条件 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

您应该使用blocksPredicate 来实现这一点。

假设您的数组位于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 中过滤您的结果。

希望这是最有效且对您有帮助的。

【讨论】:

以上是关于使用 NSDictionary 按 int 值过滤 NSArray的主要内容,如果未能解决你的问题,请参考以下文章

使用 NSPredicate 按值过滤 NSDictionary

在Objective-C中使用精确的int字典值过滤字典的NSMutableArray

使用特定键的值过滤 NSDictionary 的 NSArray

如何通过键过滤 NSArray:值,即在 NSDictionary

使用谓词过滤 NSDictionary

获取按其各自值排序的 NSDictionary 键