我正在使用Parse,它在数据库中有一个preload User表。我希望每个用户都有一个唯一的userId(Int)。 Parse的objectId是唯一的,但不是Int,username是String。用户名对于每个用户都是唯一的,因此我可以以某种方式将每个用户名转换为数字吗?
我试过.toInt(),Int(),但我什么都没得到。
为什么:
我有一个用户评级(电影)的现有表格,我想扩大这个表格的评级。 userId字段是Number值,所以我必须保持这种方式。
答案 0 :(得分:5)
Swift String
有一个hash
属性。它也符合Hashable
protocol。也许你可以使用它。
但是,hashValue
有以下评论:
Axiom:x == y暗示x.hashValue == y.hashValue。
注意:哈希值 并不保证在不同的调用中保持稳定 同样的计划。不要在程序运行中保持哈希值。
所以,请小心使用......
注意:如评论中所述,hashValue
不保证是唯一的,但碰撞应该很少,所以无论如何它都可能是一个解决方案。
答案 1 :(得分:3)
无法使用唯一的任意String到Int映射。您必须对允许的字符和字符串长度设置一些约束。但是,即使您使用不区分大小写的字母数字用户名,并使用一些智能可变长度位编码,您也可以在粗略平均值上查看每个字符大约5位。 64位整数可以通过这种方式容纳多达12个字符。比这更长,你将不可避免地发生碰撞。
我认为你从错误的一端解决问题。而不是具有String的函数 - > Int映射,阻止你使用Int< - >的单独表格字符串映射?只需要一些功能来检查该表中是否存在userID,如果不存在,则为此类userID插入一条新记录,并为其分配一个新的唯一编号。这样,耗费64位整数容量需要相当长的时间和服务流行度。