【问题标题】:how to filter this array using a predicate?如何使用谓词过滤这个数组?
【发布时间】:2015-09-26 01:36:19
【问题描述】:

我有一个名为 media_item 的对象,它有一堆与之相关的属性,但其中一个属性是一组国家/地区字符串。我想要做的是获得所有媒体项目中所有可用国家的一组(唯一列表)。所以例如继承人一个例子我有2个对象。 object1.countries[us,gbr,spa]object2.countries[us,chi,fre]。我想要做的是创建另一组这些对象并将它们显示给用户。所以结果应该是 newArray[us,gbr,spa,chi,fre] 我尝试使用 NSPredicate 但我无法弄清楚他的格式字符串是我认为可行的。

NSMutableArray *all_media_items = [[[[NSMutableArray arrayWithArray:_presentations]arrayByAddingObjectsFromArray:_videos]arrayByAddingObjectsFromArray:_brochures]mutableCopy];
NSSet *all_available_countries_set = [[NSSet setWithArray:all_media_items]filteredSetUsingPredicate:[NSPredicate predicateWithFormat:@"self.countries"]];

在这种情况下 self 会被认为是媒体对象,对吧?然后点访问器说查看数组的所有索引,如果它们不重复,则将它们放入新数组中。它看起来正确,但我无法弄清楚。有什么想法吗?

【问题讨论】:

    标签: nsarray nspredicate nsset


    【解决方案1】:

    我想出了如何在不使用 NSPRedicate 的情况下做到这一点

    NSMutableArray *all_media_items = [[[_presentations arrayByAddingObjectsFromArray:_brochures]arrayByAddingObjectsFromArray:_videos]mutableCopy];
    NSMutableSet *all_countries = [NSMutableSet set];
    [all_media_items enumerateObjectsUsingBlock:^(UFPMediaObject *media_object, NSUInteger idx, BOOL *stop) {
        [media_object.countries enumerateObjectsUsingBlock:^(NSString* country, BOOL *stop) {
            [all_countries addObject:country];
        }];
    }];
    

    这很好,但我想知道如何使用 NSPRedicate 来做到这一点

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-07
      • 1970-01-01
      • 1970-01-01
      • 2020-09-11
      • 1970-01-01
      • 2015-02-25
      相关资源
      最近更新 更多