Сравнете два масива и върнете общата стойност обратно в масив

За да сравня двата масива, използвах 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
Опитах да преброя свойството, но ми даде предупреждение (Сравняване между указател и цяло число (NSUIntefer (известен още като unasigned 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
Вече го пробвах if ([arrray count]==nil) { NSLog(@the array is празен); } ... кодът реши целта ми, но получавам предупреждение (Сравнение между указател и цяло число (NSUIntefer (известен още като unasigned int) и void)) - person GameBegins; 19.06.2013
comment
Дори опита този метод за (int i=0; i‹[nanpCodeArray count]; i++) { // // NSString *st = [nanpCodeArray objectAtIndex:i]; // // NSLog(@числото е %@,st); // if ([areaCodeString isEqualToString:st]) { // NSLog(@area code съвпада с 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 Вижте моя код, за да видите начина, по който проверявам броя на масивите. броят не може да бъде нула. Защо просто не копирате и поставите моя код. - person Geek; 19.06.2013
comment
Благодаря, Akash, работи добре, но вместо [set1 intersectSet:[NSSet setWithObject:[NSNumber numberWithInt:70]]]; код, ако предам NSString стойност [set1 intersectSet:[NSSet setWithObject:someString]]; въпреки че съвпаднаха два низа, това ми дава нулев брой масиви - person GameBegins; 19.06.2013
comment
@user2041198 Опитайте да вмъкнете низ в масив и след това да го използвате. [set intersectSet:[NSSet setWithArray:[NSArray arrayWithObject:yourString]]]; - person Geek; 20.06.2013