Сравните два массива и верните общее значение в массив

Чтобы сравнить два массива, я использовал NSMutableSet, а затем пересек два набора, чтобы получить общий результат в массиве. NSMutableSet *set1 = [NSMutableSet setWithArray:массив];

[set1 intersectSet:[NSSet setWithObject:[NSNumber numberWithInt:70]]];

NSArray *intersectArray = [[NSArray alloc]init];
intersectArray =[set1 allObjects];
NSLog(@"the testing array is %@",[intersectArray objectAtIndex:0])];

Это дает мне идеальный ответ, но он падает, когда set1 не имеет общего элемента с set2. IntersectArray пуст. Как получить нулевое значение для intersectArray.


person GameBegins    schedule 19.06.2013    source источник
comment
Используйте свойство count, чтобы проверить, есть ли в массиве элементы.   -  person A-Live    schedule 19.06.2013
comment
Вы просто не можете запросить пустой массив для его первого элемента, поэтому просто журнал неверен. Кроме того, не создавайте новый пустой массив [[NSArray alloc]init];, а затем выбрасывайте его на следующей строке, устанавливая другое значение - очень расточительно...   -  person Wain    schedule 19.06.2013
comment
Я попробовал свойство count, но оно выдало мне предупреждение (сравнение между указателем и целым числом (NSUIntefer (он же unsigned int) и void))   -  person GameBegins    schedule 19.06.2013


Ответы (2)


попробуй использовать:

 if ([set1 intersectSet:[NSSet setWithObject:[NSNumber numberWithInt:70]]])

{
NSArray *intersectArray = [[NSArray alloc]init];
intersectArray =[set1 allObjects];
NSLog(@"the testing array is %@",[intersectArray objectAtIndex:0])];
{
person TonyMkenu    schedule 20.06.2013

2 пути решения этой проблемы.

1) Если общего числа нет, то set1 пусто. Таким образом, перед выделением NSArray проверьте, есть ли в set1 хотя бы один элемент.

[set1 intersectSet:[NSSet setWithObject:[NSNumber numberWithInt:70]]];

if([set1 count]) {
    NSArray *intersectArray = [[NSArray alloc]init];
    intersectArray = [set1 allObjects];
    NSLog(@"the testing array is %@",[intersectArray objectAtIndex:0])];
}

2) Если вы хотите получить элемент массива, то перед получением элемента проверьте, не пуст ли массив и имеет ли он элемент по индексу, который вы хотите получить.

[set1 intersectSet:[NSSet setWithObject:[NSNumber numberWithInt:70]]];
NSArray *intersectArray = [[NSArray alloc]init];
intersectArray = [set1 allObjects];

if(intersectArray.count && intersectArray.count > indexOfElement) {
    NSLog(@"the testing array is %@",[intersectArray objectAtIndex:0])];
}
person Geek    schedule 19.06.2013
comment
Я уже пробовал, если ([число массивов]==nil) { NSLog(@массив пуст); } ... код решил мою задачу, но я получаю предупреждение (сопоставление между указателем и целым числом (NSUIntefer (aka unsigned int) и void)) - person GameBegins; 19.06.2013
comment
Даже он попробовал этот метод for (int i=0; i‹[nanpCodeArray count]; i++) { // // NSString *st = [nanpCodeArray objectAtIndex:i]; // // NSLog(@номер равен %@,st); // if ([areaCodeString isEqualToString:st]) { // NSLog(@код области совпадает с nanparry %@,[nanpCodeArray objectAtIndex:i]); // //перемена; // } // } но даже если две строки становятся равными, я не получаю NSLogStatement. Я предполагаю, что есть проблема с оператором if, но я не знаю, что - person GameBegins; 19.06.2013
comment
Не сравнивайте [количество массивов] с нулем. [количество массивов] возвращает NSUInteger, поэтому сравните его с 0. if ([arrray count]==0) - person Idles; 19.06.2013
comment
@user2041198 user2041198 Посмотрите мой код, чтобы посмотреть, как я проверяю количество массивов. счет не может быть равен нулю. Почему бы вам просто не скопировать мой код. - person Geek; 19.06.2013
comment
Спасибо, Акаш, все работает нормально, но вместо [set1 intersectSet:[NSSet setWithObject:[NSNumber numberWithInt:70]]]; код, если я передам значение NSString [set1 intersectSet:[NSSet setWithObject:someString]]; даже если две строки совпадают, это дает мне нулевой счет массива - person GameBegins; 19.06.2013
comment
@user2041198 user2041198 Попробуйте вставить строку в массив, а затем использовать ее. [установить intersectSet:[NSSet setWithArray:[NSArray arrayWithObject:yourString]]]; - person Geek; 20.06.2013