我有2个阵列:
array1 = "a", "b", "c","d";
array2 = "c", "b";
=> array3 = "2", "1"; // array get index from array1
当array2中的对象等于array1时,我想从array1获取索引。 我使用了这段代码但是当array2只有一个对象时它不正确。
for (id obj in array2) {
if([array1 containsObject:obj]){
[array3 addObject:[NSNumber numberWithInteger:[array1 indexOfObject:obj]]];
}
你有什么建议吗?
答案 0 :(得分:1)
修复一些明显的错误后,您的代码段应该可以正常工作。您可以通过执行array1
而不是两次搜索来加快速度:
for (id obj in array2) {
// containsObject is a linear search; combine it with indexOfObject
// for better performance:
NSUInteger pos = [array1 indexOfObject:obj];
if (pos != NSNotFound) {
[array3 addObject:[NSNumber numberWithInteger:pos]];
}
}
答案 1 :(得分:1)
您也可以使用有序集。创建一组所有相交对象,在两个数组中找到的所有对象。迭代此交集,并获取集合中每个对象的array1中的索引。
完整的命令行示例:
int main(int argc, const char * argv[])
{
@autoreleasepool {
NSArray *array1 = @[@"a", @"b", @"c",@"d"];
NSArray *array2 = @[@"c",@"b"];
NSMutableArray *array3 = [@[] mutableCopy];
NSMutableOrderedSet *intersectSet = [NSMutableOrderedSet orderedSetWithArray:array2];
[intersectSet intersectSet:[NSSet setWithArray:array1]];
for (id obj in intersectSet) {
[array3 addObject:@([array1 indexOfObject:obj])];
}
// array3 contains (2, 1)
}
return 0;
}
注意,如果array1包含相同的对象,则只返回第一个索引。