swift - Swift 中 String 的 4 位哈希

标签 swift hash swift4

我有一个包含 16 个元素的数组,其中包含 15 种与我的 UI 相匹配的颜色。根据用户输入的姓名(名字 + 姓氏),我想选择一种颜色(0-15 数组中的索引)。所以不是随机颜色,而是对于同一个名字总是相同的颜色。我认为我需要计算字符串的 4 位 (0-15) 散列。研究网络我发现很多散列库,例如 MD5。但是,获得 4 位哈希值的好方法是什么?

最佳答案

有许多可能的解决方案。您只需要一种方法将您的字符串散列为一个数字,然后使用 % 16 将最终数字缩减为您所需范围内的索引。

这是一种将字符串的 UTF-8 编码的字节相加得出总数然后使用 %16 的方法。

extension String {
    var fourBitHash: Int {
        return self.utf8.reduce(0) { $0 + Int($1) } % 16
    }
}

let colorIndex = "John R Smith".fourBitHash
print(colorIndex)

对于给定的字符串,这将始终给出相同的结果。

关于swift - Swift 中 String 的 4 位哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51606011/

相关文章:

ios - 在 Swift 中上传 Google Drive 上的电子表格文件

ios - 如何从 MWPhoto 对象中获取 UIImage?

java - MS SQL 哈希密码与纯文本的比较

ios - Swift DRY collectionView(_ cellForItemAt) 调用

swift - 如何动画一个矩阵一个一个地改变 Sprite ?

ios - TapGestureRecognizer 调用另一个类中的函数并访问第一类的变量

c# - ValueType.GetHashCode 的 native 实现如何工作?

Ruby:Hash.keys 和 Hash.values 方法返回的键/值的顺序是什么?

json - Swift 4 Decodable - 附加变量

ios - 无法将类型 '(_) -> ()' 的值分配给类型 '((String, String, String, Int) -> ())?'