iphone - Objective c - NSMutableSet 独特的对象属性

标签 iphone objective-c nsset nsmutableset

在我的应用程序中,我有一个类 Person 具有 personId 属性。
现在我需要一些数据结构来保存一堆独特的 Person 对象(unique = different personId)

所以我想我应该使用 NSMutableSet 作为我的数据结构,但是我如何让 NSMutableSet 在添加一个人时比较 personId 属性(这样我就不会添加更多的同一个人) )?

我的目标是始终拥有一组独特的人(即使我添加了两个具有相同 ID 的人),我希望 NSMutableSet 会为我完成所有艰苦的工作,如果我要添加一个人已经存在,它不会添加两次。

最佳答案

您可以通过了解 NSSet 进行比较的方式来实现这一点。 当您向集合中添加新对象时,将针对集合的每个元素调用 isEqual: 方法(这是一个 NSObject 方法)。因此,您可以做的是覆盖此方法并提供如下自定义比较:

注意:

如果您覆盖isEqual: 方法,您必须同时覆盖hash 方法

// In your Person.m
- (BOOL)isEqual:(id)anObject
{
    return [self.personId isEqual:anObject.personId]; 
    // If it's an object. Otherwise use a simple comparison like self.personId == anObject.personId
}

- (NSUInteger)hash
{
    return self.personId; //Must be a unique unsigned integer
}

关于iphone - Objective c - NSMutableSet 独特的对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10586218/

相关文章:

iphone - 快速将单个引脚添加到 MKMapView?

cocoa - 使用 NSSet 过滤 NSArray 时使用 NONE 时出现问题

objective-c - 如何从包含任意对象的 NSSet 创建排序的 NSArray?

iphone - ARC 环境中的 Setter 和 Getter

iphone - 导航栏标题过长如何处理?

iphone - 在哪里可以找到 iPhone 图像存储库?

iphone - 可以将下载的图像/文件添加到我的应用程序包中吗?

objective-c - 电子邮件地址的正则表达式

iphone - 禁用滚动 UIWebView

ios - 查找数组中出现 2 次或更多次的数字