Files
hello-algo/ja/codes/swift/chapter_hashing/simple_hash.swift
Yudong Jin 7257641e0e Retranslate the complete Japanese online edition from Chinese (#2008)
* Retranslate the complete Japanese online edition from Chinese

* Fit Japanese homepage labels and localize heading permalinks

* Point Japanese contribution instructions to the Japanese preview

* Replace locale conditionals with multilingual UI tables
2026-10-30 02:12:26 +08:00

74 lines
1.6 KiB
Swift

/**
* 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 {
/* 実行用コード */
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)")
}
}