我有一个包含 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/