Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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
Swift:字符串中唯一的Int-id_Swift_Parse Platform - Fatal编程技术网

Swift:字符串中唯一的Int-id

Swift:字符串中唯一的Int-id,swift,parse-platform,Swift,Parse Platform,我正在使用Parse,它在数据库中有一个预加载用户表。我希望每个用户都有一个唯一的userId(Int)。Parse的objectId是唯一的,但不是Int,username是字符串。用户名对于每个用户都是唯一的,所以我可以将每个用户名转换成一个数字吗 我尝试了.toInt(),Int(),但什么也没有得到 为什么: 我有一个现有的带有用户评级(电影)的表,我想用更多的评级扩展这个表。userId字段是一个数字值,因此我必须以这种方式保留它。SwiftString有一个hash属性。它也符合国际

我正在使用Parse,它在数据库中有一个预加载用户表。我希望每个用户都有一个唯一的userId(Int)。Parse的objectId是唯一的,但不是Int,username是字符串。用户名对于每个用户都是唯一的,所以我可以将每个用户名转换成一个数字吗

我尝试了.toInt(),Int(),但什么也没有得到

为什么:

我有一个现有的带有用户评级(电影)的表,我想用更多的评级扩展这个表。userId字段是一个数字值,因此我必须以这种方式保留它。

Swift
String
有一个
hash
属性。它也符合国际惯例。也许你可以用这个

但是,
hashValue
有以下注释:

公理:x==y意味着x.hashValue==y.hashValue

注意:哈希值 不能保证在对的不同调用中保持稳定 同样的程序。不要在程序运行期间保留哈希值

所以,小心使用


注意:如注释中所述,
哈希值
不保证是唯一的,但冲突应该很少,因此它可能是一种解决方案。

Swift
String
具有
哈希
属性。它也符合国际惯例。也许你可以用这个

但是,
hashValue
有以下注释:

公理:x==y意味着x.hashValue==y.hashValue

注意:哈希值 不能保证在对的不同调用中保持稳定 同样的程序。不要在程序运行期间保留哈希值

所以,小心使用


注意:如评论中所述,
hashValue
不保证是唯一的,但冲突应该很少,因此它可能是一种解决方案。

不可能将唯一的任意字符串映射到Int。您必须对允许的字符和字符串长度进行一些限制。然而,即使您使用不区分大小写的字母数字用户名,并使用一些智能的可变长度位编码,那么粗略平均每个字符大约5位。这样,64位整数最多可以容纳12个字符。超过这个时间,你将不可避免地发生碰撞


我认为你从错误的角度看待这个问题。除了使用字符串->Int映射函数外,还有什么可以阻止您使用具有Int字符串映射的单独表?只需使用一些功能来检查该表中是否存在用户标识,如果不存在,则为该用户标识插入一条新记录并为其分配一个新的唯一编号。这样,消耗64位整数容量将需要相当长的时间和服务普及度。

不可能将唯一的任意字符串映射到Int。您必须对允许的字符和字符串长度进行一些限制。然而,即使您使用不区分大小写的字母数字用户名,并使用一些智能的可变长度位编码,那么粗略平均每个字符大约5位。这样,64位整数最多可以容纳12个字符。超过这个时间,你将不可避免地发生碰撞


我认为你从错误的角度看待这个问题。除了使用字符串->Int映射函数外,还有什么可以阻止您使用具有Int字符串映射的单独表?只需使用一些功能来检查该表中是否存在用户标识,如果不存在,则为该用户标识插入一条新记录并为其分配一个新的唯一编号。这样,消耗64位整数容量将需要相当长的时间和服务普及度。

您无法将随机字符串转换为整数并保持唯一性。你能解释一下为什么需要整数标识符吗?你能提供一些例子吗。像
输入
=>
输出
一样,您应该使用指针来实现这一点。您不能将随机字符串转换为整数并保持唯一性。你能解释一下为什么需要整数标识符吗?你能提供一些例子吗。就像
输入
=>
输出
你应该使用指针来实现这一点。我也同意关于这个问题的评论:“为什么?”@MartinR这是正确的,但是碰撞应该很少,也许对于预期用途来说已经足够了。@danh实际上,这是另一种方式。。。给定两个不同的哈希,字符串保证是不同的。但是两个不同的字符串可以生成相同的哈希值。。。同样,这种情况不应该经常发生,因此可能
hashValue
有效。@MarcosCrispino:这样的语句要求我们知道如何为Swift字符串实现hash属性。这可能是真的,但我不知道。(例如,NSArray的hashValue属性只返回元素数:)我也同意关于“为什么?”@MartinR这是正确的,但碰撞应该很少,也许对于预期用途来说已经足够了。@danh实际上,这是另一种方式。。。给定两个不同的哈希,字符串保证是不同的。但是两个不同的字符串可以生成相同的哈希值。。。同样,这种情况不应该经常发生,因此可能
hashValue
有效。@MarcosCrispino:这样的语句要求我们知道如何为Swift字符串实现hash属性。这可能是真的,但我不知道。(例如,NSArray的hashValue属性只返回元素数:)只是写了相同的值。int64的范围是2^64,而字符串,甚至只是ascii字符串,更具表现力,比如说2^(7*长度)。为了保证一个唯一的id,你需要将较小的空格(int)映射到较大的空格(sting)中。int64的范围是2^64,而字符串,甚至只是ascii字符串,更具表现力,比如说2^(7*长度)。为了保证id的唯一性,您需要将较小的空格(int)映射到较大的空格(sting)。