【问题标题】:Using NSPredicate get only values of a particular key from an array of dictionaries使用 NSPredicate 仅从字典数组中获取特定键的值
【发布时间】:2014-04-11 09:55:18
【问题描述】:

我不知道这些值。我只知道钥匙。

arrTripCat : 
(
    { tripcategory = "general_tourism"; },
    { tripcategory = nightlife; },
    { tripcategory = "art_museums"; },
    { tripcategory = nightlife; },
    { tripcategory = architecture; },
    { tripcategory = nightlife; }
);

我试过的NSPredicate

NSArray *arrTripCat = [NSArray arrayWithArray:[self.dictSearchResult objectForKey:@"TripCategories"]];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY SELF.@allKeys contains[cd] %@",@"tripcategory"];

NSMutableArray *filteredArray = [[NSMutableArray alloc] init];
[filteredArray addObjectsFromArray:[arrTripCat filteredArrayUsingPredicate:predicate]];

在此之后,filteredArray 仍然具有与以前相同格式的所有数据。

filteredArray:
(
    { tripcategory = "general_tourism"; },
    { tripcategory = nightlife; },
    { tripcategory = "art_museums"; },
    { tripcategory = nightlife; },
    { tripcategory = architecture; },
    { tripcategory = nightlife; }
);

我希望得到的最终结果是将tripcategory 键的所有值放入一个数组中。即

 ( general_tourism, nightlife, art_museums, architecture )

【问题讨论】:

    标签: ios objective-c nsarray nsdictionary nspredicate


    【解决方案1】:

    您不需要谓词,因为您实际上并没有过滤,您只需要:

    NSArray *tripCategories = [arrTripCat valueForKey:@"tripcategory"];
    

    【讨论】:

      【解决方案2】:

      您不想过滤,您想折叠结果,因此使用谓词不符合您的目的。在普通的 Cocoa 中,你可以这样做:

      NSMutableArray *results = @[].mutableCopy;
      for (NSDictionary *dict in arrTripCat) {
         [results addObject:dict[@"tripcategory"];
      }
      

      这将为您提供(general_tourism、nightlife、art_museums、architecture)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-19
        相关资源
        最近更新 更多