Swift 4:Inbuilt String.hashValue为不同的字符串生成相同的结果

Nas*_*ash 2 swift

在使用Swift的内置字符串hashValue生成哈希值的同时,我们发现了两个不同的字符串生成相同哈希值的情况......但是碰撞的原因非常令人困惑.

拿这两个字符串:

var str1 = """
00000000000000
00000000000000
00000000000000
00000000000000
00000000000000
00000000100000
00000000000000
00000000000
""" //Contains a single 1 character
var str2 = """
00000000000000
00000000000000
00000000000000
00000000000000
00000000000000
00000000000000
00000000000000
00000000000
""" //Contains only zeroes

str1 == str2 // false
str1.hashValue == str2.hashValue // true ..WAT?
Run Code Online (Sandbox Code Playgroud)
  • 如果我们用单个字符修剪两个字符串,则hashValues是不同的.
  • 如果我们追加不同的字符,则hashValues是不同的.
  • 如果我们追加相同的字符,则hashValues是相同的.

很想知道这里发生了什么......

谢谢

nay*_*yem 5

查看Apple on Hashable协议的官方文档.它说:

由类型的hashValue属性提供的哈希值是一个整数,对于同等比较的任何两个实例都是相同的.也就是说,对于两个实例ab相同类型的,如果a == b,然后a.hashValue == b.hashValue.反之则不然:具有相等散列值的两个实例不一定彼此相等.

你也可以通过阅读这篇文章获得更多