/** * 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)") } }