我正在尝试比较两个数组,比如数组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;
}
}
这对我来说似乎不起作用。
答案 0 :(得分:0)
我不确定迭代器类型是否正确;听起来像b
和a
是数组的数组,但您使用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