Objective c 检查一个对象数组的属性是否与另一个对象数组的属性重叠的快速方法
我想知道是否有更好的方法来执行以下操作:Objective c 检查一个对象数组的属性是否与另一个对象数组的属性重叠的快速方法,objective-c,nsarray,nsdictionary,Objective C,Nsarray,Nsdictionary,我想知道是否有更好的方法来执行以下操作: for( customObject *myObject in self.myObjects ) { myObjectsDictionary[myObject.objectID] = customObject; } 基本上我有一个很长的自定义对象数组。这些物体中的每一个都应有一个唯一的识别号。所以,就在添加新对象之前,我创建了一个ID号字典,这样我就可以对照这些现有ID号检查新建议的ID号,并消除重复项。这似乎效率低下……是否有明显的语言功能可以
for( customObject *myObject in self.myObjects ) {
myObjectsDictionary[myObject.objectID] = customObject;
}
基本上我有一个很长的自定义对象数组。这些物体中的每一个都应有一个唯一的识别号。所以,就在添加新对象之前,我创建了一个ID号字典,这样我就可以对照这些现有ID号检查新建议的ID号,并消除重复项。这似乎效率低下……是否有明显的语言功能可以更快/更好地完成这项工作
我想到的是集合……我可以制作一组这些objectID,然后对照旧对象检查新对象的id。这比上面的好吗?若然,原因为何?如果没有,还有其他选择吗?在广义笔划级别,您的字典解决方案相当于使用
NSSet
。真正提高效率的方法是使用不同的算法(不同于字典和集合中使用的NSObject
的hash
)
例如,在键()上构建的尝试将随键长度缩放。对于给定长度的密钥,它是否比哈希更快是一个经验问题
要记住的重要原则是首先做出合理的决定(字典和集合都是非常合理的),除非有明确的需要,否则不要进一步优化。一个
NSSet
将有一个(小的)与NSDictionary
相比,前者只存储objectID
引用,后者也存储customObject
引用
如果您的objectID
实际上是整型类型的装箱(NSNumber
)或文本(NSString
)版本,则可以使用CFSet
,它可以直接存储整数(如void*
),从而保存所有装箱
NS
集合将使用在任何类型的objectID
上定义的hash
函数,该函数可以省略CFSet
使用默认值或创建时提供的值。如果您依赖默认哈希函数,并且哈希对于特定的数据集来说不是最佳的,那么您可以考虑实现自己的哈希函数——但只有在存在性能问题时才去那里。
嗯