【问题标题】:Filter entire NSDictionaries out of NSArray based on multiple keys根据多个键从 NSArray 中过滤出整个 NSDictionaries
【发布时间】:2011-01-28 06:53:52
【问题描述】:

我有一个 NSArray 的 NSDictionary 对象,我希望能够从中返回一个新的 NSDictionaries 数组,其中每个 NSDictionary 都有“Area == North”(例如)。

到目前为止我发现的最接近的例子是Using NSPredicate to filter an NSArray based on NSDictionary keys,但这只是返回给定键的唯一值,而不是具有该键的字典。有没有办法执行类似的操作,并返回整个字典?

【问题讨论】:

    标签: objective-c cocoa


    【解决方案1】:

    NSPredicate 应该可以正常工作,我试过这个:

    NSMutableArray *a = [NSMutableArray array];
    [a addObject:[NSDictionary dictionaryWithObjectsAndKeys:@"North", @"Area", @"North", @"Test", nil]];
    [a addObject:[NSDictionary dictionaryWithObjectsAndKeys:@"South", @"Area", @"North", @"Test", nil]];
    [a addObject:[NSDictionary dictionaryWithObjectsAndKeys:@"East", @"Area", @"North", @"Test", nil]];
    NSPredicate *p = [NSPredicate predicateWithFormat:@"%K matches %@", @"Area", @"North"];
    NSArray *newArray = [a filteredArrayUsingPredicate:p];
    NSLog(@"newArray:%@", [newArray description]);
    

    有效。

    【讨论】:

      【解决方案2】:

      听起来很简单:

      NSArray *unfilteredDictionaries;  // however you get this...
      NSMutableArray *filteredDictionaries = 
        [NSMutableArray arrayWithCapacity:[unfilteredDictionaries count]];
      NSDictionary *dict;
      for (dict in unfilteredDictionaries)
         if ([[dict valueForKey:@"Area"] isEqualToString:@"North"])
           [filteredDictionaries addObject:dict];
      
      return filteredDictionaries;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-11
        • 2010-10-31
        • 1970-01-01
        相关资源
        最近更新 更多