我正在尝试确定两个NSSets是否“相等”但不是isEqualToSet意义上的。两个集合中的项目是相同的类,但不是同一个对象,甚至是对同一个对象的引用。他们将拥有一个相同的属性 - 让我们称之为'name'。
我最好的选择是比较这两组来做一个简单的设置计数测试,然后是一个更复杂的objectsPassingTest:在一个集合中的每个项目上,确保一个具有相同名称的项目在另一个集合中?我希望能够处理这种情况更简单。
答案 0 :(得分:3)
我遇到了同样的问题,但我需要同时比较多个属性(类用户,属性名称和 ID )
我通过添加一个返回带有该类所需属性的 NSDictionary 的方法解决了这个问题:
- (NSDictionary *)itemProperties
{
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:self.name forKey:@"name"];
[dict setObject:self.id forKey:@"id"];
return dict;
}
然后使用valueForKey:
作为Kevin Ballard提到:
BOOL userSetsEqual = [[userSet1 valueForKey:@"itemProperties"]
isEqualToSet:[userSet2 valueForKey:@"itemProperties"]];
...其中userSet1和userSet2是包含用户对象的NSSets。
答案 1 :(得分:2)
您可以在两个集合上调用valueForKey:
并比较结果。
if ([[set1 valueForKey:@"name"] isEqualToSet:[set2 valueForKey:@"name"]]) {
// the sets match your criteria
}
答案 2 :(得分:0)
通过文档查看,似乎没有办法真正处理你的这种特殊情况。您将不得不编写一些自定义代码来处理此问题。就个人而言,我建议使用-sortedArrayUsingDescriptors:
,然后比较数组,但这只是我。您也可以通过一组进行枚举,然后使用-filteredSetUsingPredicate:
缩小另一组并获取其count
。
无论您使用哪种方法,都要考虑它可能不会超高效的事实。这可能是不可避免的,但有可能采取比其他方法更好的方法。值得深思。