我试图确定两个 NSSet 是否“相等”,但不是 isEqualToSet 的意义上的。两个集合中的项是同一个类但不是同一个对象,甚至是对同一个对象的引用。他们将拥有一个相同的属性——我们称之为“名称”。
我最好的选择是将这两组进行比较以进行简单的组计数测试,然后是更复杂的 objectsPassingTest: 在一组中的每个项目上,确保同名的项目在另一组中?我希望有更简单的方法来处理这种情况。
我试图确定两个 NSSet 是否“相等”,但不是 isEqualToSet 的意义上的。两个集合中的项是同一个类但不是同一个对象,甚至是对同一个对象的引用。他们将拥有一个相同的属性——我们称之为“名称”。
我最好的选择是将这两组进行比较以进行简单的组计数测试,然后是更复杂的 objectsPassingTest: 在一组中的每个项目上,确保同名的项目在另一组中?我希望有更简单的方法来处理这种情况。
我遇到了同样的问题,但我需要同时比较多个属性(具有属性Name和Id的类User)。
我通过添加一个返回具有类所需属性的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:
两组并比较结果。
if ([[set1 valueForKey:@"name"] isEqualToSet:[set2 valueForKey:@"name"]]) {
// the sets match your criteria
}
查看文档,似乎没有办法真正处理您的这种特殊情况。您将不得不编写一些自定义代码来处理这个问题。就个人而言,我建议使用-sortedArrayUsingDescriptors:
然后比较数组,但这只是我。您也可以枚举一组,然后使用缩小另一组-filteredSetUsingPredicate:
并获取其count
.
无论您使用哪种方法,请考虑这样一个事实,即它可能不会非常有效。这可能是不可避免的,但可能有比其他方法更好的解决方法。深思熟虑。