【问题标题】:Compare two array to get index of containing object比较两个数组以获取包含对象的索引
【发布时间】:2014-05-14 11:48:19
【问题描述】:

这确实是一个简单的问题,但我想要一种简短的方法来比较两个数组以获取包含对象的索引。例如我们有两个数组....

NSArray *array1=@[@"b",@"a",@"c"];
NSArray *array2=@[@"c",@"b",@"a"];

从array2到array1比较后,我想要array1中包含对象的索引。

我试图检查这个链接,但没有得到预期的答案 Fastest way to check if an array contains the same objects of another array

【问题讨论】:

  • 如果你只是想比较身份而不是使用[array indexOfObject:obj1]
  • 但是首先我需要比较两个数组,当我得到同一个对象时,我需要找出那个对象的索引。
  • 那么你想获取array1和array2中存在的对象,然后获取这些对象在array1中的索引吗?还是在两个数组中?
  • @DivyaBhalodiya:它不是重复的,我已经检查了 stackoverflow.com/questions/14935233/… 中的 ans 并且上面也提到了......我想要比较两个数组后的对象索引。谢谢

标签: arrays ios7 nsarray nspredicate


【解决方案1】:

要获取array1 中也存在于array2 中的对象的索引,您可以使用:

NSIndexSet* indexes = [array1 indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
    return [array2 containsObject:obj];
}];
[indexes enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL *stop) {
    NSLog(@"Index is %u", idx);  //do whatever you need to do with the index
}];

【讨论】:

  • 谢谢@Michal。这个答案是我所期望的。简短而简单。谢谢你的帮助..上帝保佑你..
【解决方案2】:

使用以下方法从数组 1 中获取比较索引:

    NSMutableArray *arrayFirst = [[NSMutableArray alloc] initWithObjects:@"b",@"a",@"c", nil];
    NSMutableArray *arraySecond = [[NSMutableArray alloc] initWithObjects:@"c",@"b",@"a", nil];
    NSMutableArray *arrayComparedIndex = [[NSMutableArray alloc] init];

    for(int i =0; i<[arrayFirst count]; i++)
    {
         if ([arraySecond containsObject:[arrayFirst objectAtIndex:i]])
         {
                NSLog(@"index - %d",i);
                [arrayComparedIndex addObject:[NSString stringWithFormat:@"%d",i]];
        }
    }
    NSLog(@"arraythree - %@",arrayComparedIndex);

【讨论】:

  • 谢谢 Divya 但是请你告诉我不使用 for 循环的方法。是否可以??我正在寻找不使用循环的方式。很好的解决方案谢谢..
  • @AG.IS,没有循环是什么意思?你的问题在O(1)时间没有解决方案。
  • 我的意思是我想避免 For 循环,或者你可以说我想要短线 ans。像 Michał Ciuba。
【解决方案3】:
for (int i = 0; i < array1.count; i++) {
        NSString *s = array1[i];
        NSInteger anIndex = [array2 indexOfObject:s];

        NSLog(@"Index of %@ is: %d", s, anIndex);

        if (NSNotFound == anIndex) {
            NSLog(@"not found");
        }
    }

【讨论】:

  • 它仅在两个数组具有相同数量的对象时才有效。当两个数组的对象数量不同时,可能是它不起作用。当 array1 计数大于 array2 计数时,它会崩溃。
  • 这是一个简单问题的简单答案,当然您也可以进行长度检查,但这不是问题的一部分,也不难弄清楚
  • 谢谢@ClemensL,但是对于这种情况,这是不是最短的技巧
猜你喜欢
  • 2014-02-08
  • 2019-05-20
  • 2021-05-17
  • 1970-01-01
  • 2013-10-23
  • 2021-07-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多