Objective c 通过单个属性比较NSSET

Objective c 通过单个属性比较NSSET,objective-c,comparison,nsset,Objective C,Comparison,Nsset,我试图确定两个NSSET是否“相等”,但不是在等质量集的意义上。两个集合中的项是同一类,但不是同一对象,甚至不是对同一对象的引用。他们将有一个相同的属性——让我们称之为“名称” 在比较这两个集合时,我最好做一个简单的集合计数测试,然后是一个更复杂的objectsPassingTest:在一个集合中的每个项目上,确保另一个集合中有一个同名的项目?我希望有更简单的方法来处理这个案件。查看文档,似乎没有办法真正处理您的这个特殊案件。您必须编写一些自定义代码来处理此问题。就我个人而言,我建议使用描述符使

我试图确定两个NSSET是否“相等”,但不是在等质量集的意义上。两个集合中的项是同一类,但不是同一对象,甚至不是对同一对象的引用。他们将有一个相同的属性——让我们称之为“名称”


在比较这两个集合时,我最好做一个简单的集合计数测试,然后是一个更复杂的objectsPassingTest:在一个集合中的每个项目上,确保另一个集合中有一个同名的项目?我希望有更简单的方法来处理这个案件。

查看文档,似乎没有办法真正处理您的这个特殊案件。您必须编写一些自定义代码来处理此问题。就我个人而言,我建议使用描述符使用
-sortedarray:
然后比较数组,但这只是我的建议。您还可以枚举一个集合,然后使用
-filteredSetUsingPredicate:
缩小另一个集合的范围,并获取其
计数


无论你使用哪种方法,都要考虑到它可能不是超级有效的。这可能是不可避免的,但可能有一些方法比其他方法更好。值得思考。

你可以在两个集合上调用
valueForKey:
,然后比较结果

if ([[set1 valueForKey:@"name"] isEqualToSet:[set2 valueForKey:@"name"]]) {
    // the sets match your criteria
}

我也遇到了同样的问题,但我需要同时比较多个属性(classUser与propertiesNameId

我通过添加一个方法来解决这个问题,该方法返回一个带有类所需属性的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上返回一个集合,其中对象是原始内容的键控属性。