Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 检查一个对象数组的属性是否与另一个对象数组的属性重叠的快速方法_Objective C_Nsarray_Nsdictionary - Fatal编程技术网

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
使用默认值或创建时提供的值。如果您依赖默认哈希函数,并且哈希对于特定的数据集来说不是最佳的,那么您可以考虑实现自己的哈希函数——但只有在存在性能问题时才去那里。