这个问题看起来很傻,但我很怀疑如何在没有for循环的情况下有效地检查它。
我有一个NSObject类数组,包含3个元素,比如Array1
<__NSArrayI 0x7fb6952437b0>(
<ActiveBidModel: 0x7fb6950f0680>,
<ActiveBidModel: 0x7fb69516d500>,
<ActiveBidModel: 0x7fb69514f190>
)另一方面,我有其他数组包含相同的3个元素,但是具有不同的内存地址和不同的排序顺序,Array2说
<__NSArrayM 0x7fb695208ac0>(
<ActiveBidModel: 0x7fb6952226e0>,
<ActiveBidModel: 0x7fb69515f730>,
<ActiveBidModel: 0x7fb695145cb0>
)现在,我希望检查Array1中的元素是否包含Array2的任何元素,或者两个数组是否相等。
我尝试过==操作符,isEqual,isEqualToArray,但是没有运气也尝试了NSSet相交。
编辑
如果比较Array1 == Array22 //假设我知道两个相等元素的索引,那么它返回true
发布于 2016-09-01 14:34:37
实现- (BOOL)isEqual:(id)object for ActiveBidModel,以便在内部值匹配时返回YES。
然后,如果所有内容都相等,并且顺序相同,数组将报告相等。
若要处理不同的排序,请转换为集合。
例如,命名为"MyObject“的有:
- (BOOL)isEqual:(id)object {
BOOL result = NO;
if ([object isKindOfClass:[MyObject class]]) {
result = [self.name isEqualToString:[object name]];
}
return result;
}测试用例:
NSArray *a1 = [NSArray arrayWithObjects:[[MyObject alloc] initWithName:@"name"], [[MyObject alloc] initWithName:@"name2"], nil];
NSArray *a2 = [NSArray arrayWithObjects:[[MyObject alloc] initWithName:@"name2"], [[MyObject alloc] initWithName:@"name"], nil];
if ([a1 isEqual:a2]) {
NSLog(@"Array match");
} else {
NSLog(@"No array match");
}
NSSet *s1 = [NSSet setWithArray:a1];
NSSet *s2 = [NSSet setWithArray:a2];
if ([s1 isEqual:s2]) {
NSLog(@"Set match");
} else {
NSLog(@"No set match");
}2016-09-01 10:29:27.818收集28481:1193715无数组匹配 2016-09-01 10:29:32.330收藏品28481:1193715
https://stackoverflow.com/questions/39273352
复制相似问题