Objective c 通过单个属性比较NSSET
我试图确定两个NSSET是否“相等”,但不是在等质量集的意义上。两个集合中的项是同一类,但不是同一对象,甚至不是对同一对象的引用。他们将有一个相同的属性——让我们称之为“名称”Objective c 通过单个属性比较NSSET,objective-c,comparison,nsset,Objective C,Comparison,Nsset,我试图确定两个NSSET是否“相等”,但不是在等质量集的意义上。两个集合中的项是同一类,但不是同一对象,甚至不是对同一对象的引用。他们将有一个相同的属性——让我们称之为“名称” 在比较这两个集合时,我最好做一个简单的集合计数测试,然后是一个更复杂的objectsPassingTest:在一个集合中的每个项目上,确保另一个集合中有一个同名的项目?我希望有更简单的方法来处理这个案件。查看文档,似乎没有办法真正处理您的这个特殊案件。您必须编写一些自定义代码来处理此问题。就我个人而言,我建议使用描述符使
在比较这两个集合时,我最好做一个简单的集合计数测试,然后是一个更复杂的objectsPassingTest:在一个集合中的每个项目上,确保另一个集合中有一个同名的项目?我希望有更简单的方法来处理这个案件。查看文档,似乎没有办法真正处理您的这个特殊案件。您必须编写一些自定义代码来处理此问题。就我个人而言,我建议使用描述符使用
-sortedarray:
然后比较数组,但这只是我的建议。您还可以枚举一个集合,然后使用-filteredSetUsingPredicate:
缩小另一个集合的范围,并获取其计数
无论你使用哪种方法,都要考虑到它可能不是超级有效的。这可能是不可避免的,但可能有一些方法比其他方法更好。值得思考。你可以在两个集合上调用valueForKey:
,然后比较结果
if ([[set1 valueForKey:@"name"] isEqualToSet:[set2 valueForKey:@"name"]]) {
// the sets match your criteria
}
我也遇到了同样的问题,但我需要同时比较多个属性(classUser与propertiesName和Id)
我通过添加一个方法来解决这个问题,该方法返回一个带有类所需属性的NSDictionary:
- (NSDictionary *)itemProperties
{
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:self.name forKey:@"name"];
[dict setObject:self.id forKey:@"id"];
return dict;
}
然后使用凯文·巴拉德提到的valueForKey:
:
BOOL userSetsEqual = [[userSet1 valueForKey:@"itemProperties"]
isEqualToSet:[userSet2 valueForKey:@"itemProperties"]];
。。。其中userSet1和userSet2是包含User对象的nsset。哇,这非常简单。调用valueForKey:在具有属性的NSSet上返回一个集合,其中对象是原始内容的键控属性。