【问题标题】:Equality of Two NSMutableSets Using Custom Class Attributes使用自定义类属性的两个 NSMutableSet 相等
【发布时间】:2013-03-08 06:01:41
【问题描述】:

您如何检查两个NSMutableSets 是否相等相同的成员,相同的成员数量)?

我对@9​​87654322@ 的实现似乎不起作用。

// members is a NSMutableSet of AUser objects

// users is also a NSMutableSet of AUser objects, it is an attribute of instances of the AGroup class

[[group valueForKey:@"users"] isEqualToSet:members]


AGroup
- users

AUser
- name  (String)

如何通过检查名称属性来检查集合是否相等?

对不起,我的知识缺乏,这是我第一次接触iOS编程,所以我现在只知道基础知识。

【问题讨论】:

  • isEqualToSet: 应该可以工作。也许是集合中的对象的问题。他们应该实现isEqual:hash
  • 你设置的内容是什么?字符串或数字或其他? “isEqualToSet”可能只查看集合中对象的地址来确定相等性。但是看上面的评论,可能也是在看某些类型的对象的内容。
  • 哦,好的。谢谢你帮助我理解了这个问题。我将发布有关问题的更新。集合中的对象是自定义类的两个实例,虽然我不知道如何检查属性,但它们确实具有 String 属性。
  • 已更新。是否还需要在这些自定义类中实现isEqual,我暂时没有做,主要是想检查NSMutableSets之间的名称字符串。 @xlc
  • 您可以为您的自定义类实现isEqual:hash。但如果您只想比较名称,马丁的答案应该有效

标签: objective-c cocoa-touch cocoa equality nsmutableset


【解决方案1】:

如果要检查相应的name 属性是否相同,以下应该可以工作:

[[group valueForKeyPath:@"users.name"] isEqualToSet:[members valueForKey:@"name"]]

[group valueForKeyPath:@"users.name"]返回组内所有用户的名字集合,[members valueForKey:@"name"]返回members集合中所有用户的名字集合。

更新: 在 cmets 中很清楚,members 是一组字符串,而不是一组用户对象。因此代码简化为:

[[group valueForKeyPath:@"users.name"] isEqualToSet:members]

【讨论】:

  • 首先,@martin 你先生是个宝石!感谢您帮助我,感谢您帮助 SO 社区。我会给你一个你应该为典型代码而应得的复选标记和赞成票,但不幸的是我的noobish代码有点奇怪。我收到一个错误:'[<__NSCFString 0xa268260> valueForUndefinedKey:]: this class is not key value coding-compliant for the key name.' 看来我必须按照上面的建议实现 isEqual: 和哈希。
  • @GangstaGraham:听起来members 是一组字符串,而不是一组用户对象。试试[[group valueForKeyPath:@"users.name"] isEqualToSet:members]
  • 哇哦!!!!!! @martin 那行得通。是的,我只记得成员实际上是一组字符串,回头看我的代码,没错!做得好。如果可以的话,我会加倍支持这个答案。再次感谢。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-06
  • 1970-01-01
  • 2020-01-02
  • 2020-07-12
  • 1970-01-01
  • 2021-06-27
相关资源
最近更新 更多