Как определить, что 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]);