如何从一个数组中获取具有其他相同属性的对象?

Posted

技术标签:

【中文标题】如何从一个数组中获取具有其他相同属性的对象?【英文标题】:How get objects from one array with same properties of other? 【发布时间】:2016-11-25 10:18:55 【问题描述】:

例如: 我有两个NSMutableArray。一个@[1,2,3,4,5,6,7]。其他有像

这样的对象
@[
   @@idObjectToSearch":1, @"name":@"aaaaa", @"surname": @"bbbbb", @@idObjectToSearch":2, @"name":@"aaaaa", @"surname": @"ccccc",
    ...
   @@idObjectToSearch":100, @"name":@"aaaaa", @"surname": @"cccdcd"
];

那么我怎样才能更有效地从第二个数组中提取所需的对象呢?

【问题讨论】:

这两个数组之间的联系是什么,基于您要从第二个数组中提取对象的内容? @Rajat 我需要“idObjectToSearch”的所有对象 除非您想将第二个数组中的对象加载到由idObjectToSearch 值键入的字典中(这就是我会做的),否则您使用的任何技术都将是数组的线性搜索 【参考方案1】:

您需要在第二个数组中使用NSPredicate

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"idObjectToSearch IN %@", firstArray];
//In above predicate instead of passing `1` you need to pass object from first array that you want.

NSArray *filterArray = [secondArray filteredArrayUsingPredicate:predicate];

//Now access Array objects
if (filterArray.count > 0) 
     NSLog(@"%@",filterArray);

【讨论】:

它只返回一个对象,但我需要全部 7 个,如示例所示。所以我可以用 OR 形成一个长谓词,但我认为这不是我的情况的好方法。 @Viktorianec 那么你需要使用IN 检查编辑后的答案【参考方案2】:

你可以这样做

NSMutableArray * arrSorted = [NSMutableArray new];
for(int i=0;i<arr.count;i++) 
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"idObjectToSearch == %@", firstArray[i]];
    NSUInteger index = [secondArray indexOfObjectPassingTest:^(id obj, NSUInteger idx, BOOL *stop) 
        return [predicate evaluateWithObject:obj];
    ];
    if (index != NSNotFound) 
        [arrSorted addObject:[arrM objectAtIndex:index]];
    

arrSorted 将包含您的排序数据

【讨论】:

以上是关于如何从一个数组中获取具有其他相同属性的对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何从对象数组中获取具有属性的列表,除非它包含具有特定值的另一个项目?

对象数组的对象。获取具有相同属性的所有值的长度

从CoreData获取给定属性具有相同值的对象?

如何从具有嵌套对象数组的对象数组中获取所有特定值?

如何从一行列表中的所有对象中获取相同的属性

TS / JS-如果对象的属性与数组中的另一个属性相匹配,则从对象数组中获取“值”