如何从一个数组中获取具有其他相同属性的对象?
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
将包含您的排序数据
【讨论】:
以上是关于如何从一个数组中获取具有其他相同属性的对象?的主要内容,如果未能解决你的问题,请参考以下文章