NSMutableArray包含Object问题

时间:2010-11-03 17:39:12

标签: objective-c cocoa nsmutablearray

我正在尝试比较两个数组,比如数组a是一系列数组,如下所示:

((1,1), (1,2), (1,3), (1,4), (2,1), (2,2), (2,3), (3,1), (3,2), (3,3)) 

和数组b是一系列数组,如下所示:

((1,1), (1,2), (1,3), (1,4), (2,1), (2,2), (2,3))

如何检查数组a中的项是否不在数组b

for(NSString* itemFromA in a) {
 if ([b containsObject: itemFromA] == FALSE) { 
   NSLog(@"ok");
   break;
 }
}

这对我来说似乎不起作用。

2 个答案:

答案 0 :(得分:0)

我不确定迭代器类型是否正确;听起来像ba是数组的数组,但您使用NSString*作为迭代器类型。我不是Objective-C内部的高手,但我相信这会导致您的检查失败(因为itemFromA将是NSString*类型,并且您正在迭代NSArray*的集合峰)

此外,containsObject:可能没有按照您的意愿行事,即它使用isEqual来执行比较。文档中提到isEqual专门用于NSArray,但我无法找到有关该专业化的详细信息。我不知道containsObject:在这些“深层”比较操作中的表现如何。

答案 1 :(得分:0)

我解决了这个问题,尽管可以随意清理它。

@implementation AppController - (IBAction)GetArrayData:(id)sender {

int a=10;
int b=10;
int c=20;
int d=20;
int row=0;
int col=0;

NSMutableArray* e = [[NSMutableArray alloc] init];
NSMutableArray* f = [[NSMutableArray alloc] init];

for(row=0; row<a; row++) {
    for(col=0; col<b; col++) {
        NSNumber* thisrow = [NSNumber numberWithInt:row];
        NSNumber* thiscol = [NSNumber numberWithInt:col];
        [e addObject:[NSArray arrayWithObjects:thisrow, thiscol, nil]];
    }
}

for(row=0; row<c; row++) {
    for(col=0; col<d; col++) {
        NSNumber* thisrow = [NSNumber numberWithInt:row];
        NSNumber* thiscol = [NSNumber numberWithInt:col];
        [f addObject:[NSArray arrayWithObjects:thisrow, thiscol, nil]];

    }
}

//check to see if f contains items from e
for(NSString* thisset in f) {
    if ([e containsObject: thisset]) {
        NSLog(@"This set (%@) is already being used.", thisset);
    } else {
        NSLog(@"We can start the ad at these coordinates: %@", thisset);
        break;
    }
}

[e release]; [f发布]; } @end