/** * File: simple_hash.swift * Created Time: 2023-07-01 * Author: nuomi1 (nuomi1@qq.com) */ /* 加法哈希 */ func addHash(key: String) -> Int { var hash = 0 let MODULUS = 1_000_000_007 for c in key { for scalar in c.unicodeScalars { hash = (hash + Int(scalar.value)) % MODULUS } } return hash } /* 乘法哈希 */ func mulHash(key: String) -> Int { var hash = 0 let MODULUS = 1_000_000_007 for c in key { for scalar in c.unicodeScalars { hash = (31 * hash + Int(scalar.value)) % MODULUS } } return hash } /* 异或哈希 */ func xorHash(key: String) -> Int { var hash = 0 let MODULUS = 1_000_000_007 for c in key { for scalar in c.unicodeScalars { hash ^= Int(scalar.value) } } return hash & MODULUS } /* 旋转哈希 */ func rotHash(key: String) -> Int { var hash = 0 let MODULUS = 1_000_000_007 for c in key { for scalar in c.unicodeScalars { hash = ((hash << 4) ^ (hash >> 28) ^ Int(scalar.value)) % MODULUS } } return hash } @main enum SimpleHash { /* Driver Code */ static func main() { let key = "Hello 算法" var hash = addHash(key: key) print("加法哈希值为 \(hash)") hash = mulHash(key: key) print("乘法哈希值为 \(hash)") hash = xorHash(key: key) print("异或哈希值为 \(hash)") hash = rotHash(key: key) print("旋转哈希值为 \(hash)") } }