Как определить, что IndexAtObject или IndexPath имеют 2 сравниваемых NSArray. IOS. Цель С

У меня есть 2 NSArray х. Как это:

NSArray *array1 = [NSArray arrayWithObjects:@"Frog", @"Cat", @"Dog", Pig];
NSArray *array2 = [NSArray arrayWithObjects:@"Pig", @"Dog", @"Cat",@"Rabbit",@"Hen", nil];

NSMutableArray *intermediate = [NSMutableArray arrayWithArray:array1];
[intermediate removeObjectsInArray:array2];
NSUInteger difference = [intermediate count];

Я хочу сравнить массив1 с массивом2...

Если у array2 есть какие-либо значения или объекты из array1, как узнать, какие пути индекса используются для значений, которые совпадают в array2 со значениями в array1.

Другими словами, если Cat и Dog из array1 находятся в array2. По какому пути индекса находится кот и собака в массиве 2...

Например, пути индекса Dog и Cat в массиве 2 равны 1 и 2, и эти 2 значения совпадают между двумя массивами.

3 ответа

Решение

Простое использование быстрого перечисления для этого

for(NSString* str1 in array1)
    {
      for(NSString* str2 in array2)
      {
        if([str1 isEqualToString:str2])
           int index = [array2 indexOfObject:str2];
           NSLog(@"The index is : %d", index);
      }
    }

Вы должны использовать простой для в цикле и метод NSArray

- (NSUInteger)indexOfObject:(id)anObject;

ОБНОВИТЬ:

for(NSString* str1 in array1)
{
    int index = [array2 indexOfObject:str1];
    if (index != NSNotFound)
        NSLog(@"The index is : %d", index);
}

UPDATE2:

Для больших массивов вы можете попробовать

NSIndexSet *set = [array1 indexesOfObjectsWithOptions:NSEnumerationConcurrent
                        passingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
                            return [array2 containsObject:obj];
                            }];

повысить производительность.

Вы также можете сделать это с помощью блоков, это довольно хорошо


  NSArray *array1 = [NSArray arrayWithObjects:@"Frog", @"Cat", @"Dog", @"Pig",nil];
  NSArray *array2 = [NSArray arrayWithObjects:@"Pig", @"Dog", @"Cat",@"Rabbit",@"Hen", nil];

 NSMutableArray *indexArray = [[NSMutableArray alloc]init];
 [array2 enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) 
  {  
    if([array1 containsObject:obj])
    {
       [indexArray addObject:[NSNumber numberWithInt:idx]];
    }
}];

NSLog(@"indexes->%@",[indexArray description]);


Другие вопросы по тегам