iphone-通过哈希将字符串转换为int?对于CoreData';s的表现

iphone-通过哈希将字符串转换为int?对于CoreData';s的表现,iphone,performance,core-data,hash,nsstring,Iphone,Performance,Core Data,Hash,Nsstring,谁能告诉我一种将NSString散列为整数的方法,并且该散列应该始终与NSString配对相同。对于NSString,int哈希值在任何情况下都不应更改 我本想使用[NSString hash],但这篇文章()说[NSString hash]会改变,这意味着一个相同的NSString可能有不同的散列值 这不是我想要的 我解释如下,我希望有这样一个NSString-to-Integer散列函数的目的 我正在使用CoreData存储我的所有数据。每次提取时,我提取“CategoryUrl”与某个匹配

谁能告诉我一种将NSString散列为整数的方法,并且该散列应该始终与NSString配对相同。对于NSString,int哈希值在任何情况下都不应更改

我本想使用[NSString hash],但这篇文章()说[NSString hash]会改变,这意味着一个相同的NSString可能有不同的散列值

这不是我想要的

我解释如下,我希望有这样一个NSString-to-Integer散列函数的目的

我正在使用CoreData存储我的所有数据。每次提取时,我提取“CategoryUrl”与某个匹配的所有项目。“CategoryUrl”非常长,就像一个普通的长http url一样,但是里面有额外的字符来显示更多的元信息

无论如何,对于每一个这样的获取,它都非常慢,因为我认为CoreData必须将每个项的“CategoryUrl”属性与需要找到的属性进行比较。在CoreData中比较NSString是很慢的,比Integer慢,对吧

我的想法是在保存之前对每个项目的“CategoryUrl”进行散列,并将散列值存储在每个项目的新属性中。因此,对于每次获取,我只让CoreData比较“CategoryUrl”的哈希值,而不是NSString值。这可能会加快速度

我用假散列值做了一些实验,它确实提高了很多。但我仍然不确定,因为我还没有找到一个像样的真正的NSString-to-Integer散列函数

任何人都可以告诉我,我对CoreData性能的思考方向是否正确,以及将NSString散列为整数的最佳方法是什么


感谢

NSString内置哈希方法存在文档记录的问题,因此如果您不想依赖它,可以改用哈希。而不是垃圾邮件,所以我会把你链接回一个有一些很好答案的网站。请注意,在存储数据时,您的性能会受到轻微的影响,但您的读取速度应该会大大加快

根据定义,散列是单向的。我想你需要在某个时候得到你的分类的价值?您可能需要考虑其他优化产品性能的方法。有关散列的详细信息,请阅读此处:。是否为核心数据“表”定义了索引?是的,我知道这是一种方法,但没有问题,因为我将实际CategoryURL存储为项的另一个属性。我使用hash sololy来提高获取速度。是的,我已经定义了索引,并且NSString“CategoryURL”被索引。我在xcodeOkay中选择了它,如果您可以单独访问CategoryURL,那么我建议您在场景中使用MD5哈希。但是MD5哈希值也是一个字符串,对吗?我需要的是一个整数MD5散列值将是一个更短的字符串,它可以更好地索引并提高读取速度。如果需要更多优化,可以使用此处描述的FNV哈希函数将其转换为整数-。