【问题标题】:NSPredicate to search an array with any objects from a list | Obj CNSPredicate 使用列表中的任何对象搜索数组 |对象 C
【发布时间】:2017-03-06 11:58:12
【问题描述】:

我必须根据标签 ID 数组对字典数组进行排序/搜索。

Web 服务会发送一个文章列表,其中每篇文章的标签 ID 为 [1,2,3,5]。

用户从列表中选择多个标签,标签 ID 存储在一个数组中,如 [4,2,8,1]

** 现在我必须将用户选择的标签与文章标签进行比较,如果 2 个数组中的任何标签匹配,则将其存储在结果数组中 **

我应该使用什么以及如何使用? NSPredicate 或 NSSortdescriptor

简而言之,我必须这样做:

userTags = [4,6,2,1]
articleTags = [1,2,3,4,5]

if ANY [userTags] IN [articleTags] 
  [resultArr addObject:article]

【问题讨论】:

  • 您能否详细说明或提供虚拟 NSDictionary ?
  • 使用谓词..
  • @MohshinShah 请检查更新的问题
  • @TahaIshfaqBhutta 有问题你已经告诉了字典数组,例如你已经显示了两个 id 数组?
  • @TahaIshfaqBhutta 检查我的解决方案。

标签: ios objective-c arrays sorting search


【解决方案1】:

我相信你应该为你的任务使用 NSSet 而不是 NSArrays。并检查集合是否相交,例如:

NSSet *tags = [NSSet setWithArray:@[@1, @3, @5]];

NSSet *article1 = [NSSet setWithArray:@[@2, @4, @6]];
NSSet *article2 = [NSSet setWithArray:@[@2, @3, @4]];
NSLog(@"%d", [tags intersectsSet:article1]);
// 0
NSLog(@"%d", [tags intersectsSet:article2]);
// 1

【讨论】:

    【解决方案2】:

    Mindaugas 的回答有效。

    NSSet *selectedTagSet = [NSSet setWithArray:selectedTagIds];
    NSMutableArray *result = [NSMutableArray array];
    
    for (int i = 0; i < [self.responceArray count]; i++) {
    
        NSMutableDictionary *dict = [self.responceArray objectAtIndex:i];
    
        NSSet *tagSet = [NSSet setWithArray:[[dict objectForKey:@"seller"] objectForKey:@"tags"]];
    
        if ([tagSet intersectsSet:selectedTagSet])
        {
            [result addObject:[self.responceArray objectAtIndex:i]];
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多