Сравните два массива, чтобы получить индекс содержащего объекта

Это действительно простой вопрос, но мне нужен короткий способ сравнить два массива, чтобы получить индекс содержащего объекта. Например, у нас есть два массива....

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

После сравнения массива2 с массивом1 мне нужен индекс содержащего объекта в массиве1.

Я попытался проверить эту ссылку, но не получил ожидаемого ответа Самый быстрый способ проверить, содержит ли массив те же объекты из другого массива


person AG.29    schedule 14.05.2014    source источник
comment
если вы просто хотите сравнить личность, чем использовать [array indexOfObject:obj1]   -  person Argent    schedule 14.05.2014
comment
Но сначала мне нужно сравнить два массива, и когда я получу один и тот же объект, мне нужно узнать индекс этого объекта.   -  person AG.29    schedule 14.05.2014
comment
Итак, вы хотите получить объекты, присутствующие в массиве1 и массиве2, а затем получить индекс этих объектов в массиве1? Или в обоих массивах?   -  person Michał Ciuba    schedule 14.05.2014
comment
@DivyaBhalodiya: это не дубликат, я уже проверил ответы в stackoverflow.com/questions/14935233/, а также упомянуть выше... Я хочу индекс объекта после сравнения двух массивов. Спасибо   -  person AG.29    schedule 14.05.2014
comment
Да, точно @MichałCiuba   -  person AG.29    schedule 14.05.2014
comment
@AG.IS: мне нужен индекс объекта после сравнения двух массивов, что это вообще значит? Для каждого элемента в массиве1 проверьте с помощью [array1 indexOfObject:item], присутствует ли он в массиве2, и если он просто использует этот индекс   -  person Argent    schedule 14.05.2014
comment
@Argent: это означает, что у меня есть два массива, содержащие одинаковые объекты. Итак, я хочу сравнить друг друга, и когда я найду объекты, одинаковые в обоих массивах, в этой ситуации мне нужен индекс найденного объекта из массива 1.   -  person AG.29    schedule 14.05.2014
comment
@AG.IS: у тебя есть масса ответов, как это сделать   -  person Argent    schedule 14.05.2014


Ответы (3)


Для получения индексов объектов в 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
}];
person Michał Ciuba    schedule 14.05.2014
comment
Спасибо @Михал. Этот ответ - то, что я ожидал. Коротко и просто. Спасибо за помощь..Да благословит вас Бог.. - person AG.29; 15.05.2014

Используйте следующий метод, чтобы получить индекс сравнения из массива 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);
person Rigel Networks    schedule 14.05.2014
comment
Спасибо, Дивья. Но, пожалуйста, не могли бы вы рассказать мне, как без использования цикла for. Является ли это возможным?? Я нахожу способ без использования цикла. Хорошее решение Спасибо.. - person AG.29; 14.05.2014
comment
@AG.IS, что значит без цикла? нет решения вашей проблемы за O(1) время. - person holex; 14.05.2014
comment
Я имею в виду, что я хочу избежать цикла For, или вы можете сказать, что мне нужны короткие строки. Как Михал Чуба. - person AG.29; 14.05.2014

person    schedule
comment
Он работает только в том случае, когда оба массива имеют одинаковое количество объектов. Может быть, это не работает, когда количество объектов не одинаково для обоих массивов. Это дает сбой, когда количество массивов1 больше, чем количество массивов2. - person Rigel Networks; 14.05.2014
comment
Это простой ответ на простой вопрос, конечно, вы также можете выполнять проверки длины, но это не было частью вопроса, и это не так сложно понять. - person ClemensL; 14.05.2014
comment
Спасибо @ClemensL, но это самый короткий трюк для этой ситуации? - person AG.29; 14.05.2014