ios - 使用 NSPredicate 过滤对象和键(需要拆分)

标签 ios nsdictionary nspredicate nssortdescriptor

我设置了以下字典(对象,键)

0, "10;0.75,0.75"
1, "0;2.25,2.25"
3, "1;3.5,2.0"
4, "1;4.5,3.0"
5, "2;6.0,5,0"

我要过滤的内容将基于对象和键。该对象是一个 NSNumber。关键是一个字符串,但我真的不想要整个字符串。我想拆分由分号分隔的字符串并获取拆分的第一个索引,这将根据我要查找的对象生成字符串 10、0、1、1 或 2。

作为一个具体的例子:

是否有任何键等于@“1”且对象大于3。

在这种情况下,我应该期望返回 YES,因为对象 4 在我进行拆分后有一个等于 @"1"的键。

我想我正在寻找一种聪明的方法来定义 NSPredicate 以对由分号分隔的键进行拆分,然后基于它进行过滤(比较等)。如果您有任何问题或需要其他信息,请告诉我。

最佳答案

我能想到的一个非常幼稚的实现

- (BOOL)hasKey:(NSString *)key withValueGreaterThan:(id)object{

    NSDictionary *dictionary = @{@"10;0.75,0.75": @0,
                                 @"0;2.25,2.25" : @1,
                                 @"1;3.5,2.0"   : @3,
                                 @"1;4.5,3.0"   : @4,
                                 @"2;6.0,5,0"   : @5};


    NSPredicate *keyPredicate = [NSPredicate predicateWithFormat:@"SELF BEGINSWITH %@",key];

    NSArray *filteredKeys = [[dictionary allKeys]filteredArrayUsingPredicate:keyPredicate];

    for (NSString *k in filteredKeys) {

        NSNumber *value = dictionary[k];
        if (value>object) {
            return YES;
        }
    }

    return NO;
}

使用

BOOL hasValue = [self hasKey:@"1;" withValueGreaterThan:@3];

关于ios - 使用 NSPredicate 过滤对象和键(需要拆分),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17102298/

相关文章:

ios - UIPageViewController 翻页示例

ios - 使用 iOS 7.1 的 UIImageView 子类中的 setter/getter 的不同行为

ios - 在swift中遍历nsdictionary

ios - 使用值对 NSDictionary 的 NSArray 进行排序

ios - 具有动态键和值的 NSPredicate

objective-c - CoreData - NSPredicate 与 NSSet

ios - 同步还是异步获取userID(iOS)?

objective-c - 自定义步骤 UISlider

ios - 检索 NSDictionary 对象

objective-c - 按属性 IN 数组过滤核心数据结果