首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >**NSObject**数组包含**NSObject**其他数组的任何元素

**NSObject**数组包含**NSObject**其他数组的任何元素
EN

Stack Overflow用户
提问于 2016-09-01 13:50:20
回答 1查看 134关注 0票数 0

这个问题看起来很傻,但我很怀疑如何在没有for循环的情况下有效地检查它。

我有一个NSObject类数组,包含3个元素,比如Array1

代码语言:javascript
复制
<__NSArrayI 0x7fb6952437b0>(
   <ActiveBidModel: 0x7fb6950f0680>,
   <ActiveBidModel: 0x7fb69516d500>,
   <ActiveBidModel: 0x7fb69514f190>
)

另一方面,我有其他数组包含相同的3个元素,但是具有不同的内存地址和不同的排序顺序,Array2说

代码语言:javascript
复制
 <__NSArrayM 0x7fb695208ac0>(
 <ActiveBidModel: 0x7fb6952226e0>,
 <ActiveBidModel: 0x7fb69515f730>,
 <ActiveBidModel: 0x7fb695145cb0>
 )

现在,我希望检查Array1中的元素是否包含Array2的任何元素,或者两个数组是否相等。

我尝试过==操作符,isEqual,isEqualToArray,但是没有运气也尝试了NSSet相交。

编辑

如果比较Array1 == Array22 //假设我知道两个相等元素的索引,那么它返回true

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-01 14:34:37

实现- (BOOL)isEqual:(id)object for ActiveBidModel,以便在内部值匹配时返回YES

然后,如果所有内容都相等,并且顺序相同,数组将报告相等。

若要处理不同的排序,请转换为集合。

例如,命名为"MyObject“的有:

代码语言:javascript
复制
- (BOOL)isEqual:(id)object {
    BOOL result = NO;
    if ([object isKindOfClass:[MyObject class]]) {
        result = [self.name isEqualToString:[object name]];
    }
    return result;
}

测试用例:

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39273352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档