hello-algo/codes/swift/chapter_hashing/array_hash_map.swift
2023-03-15 03:48:31 +08:00

139 lines
3.3 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* File: array_hash_map.swift
* Created Time: 2023-01-16
* Author: nuomi1 (nuomi1@qq.com)
*/
/* int->String */
class Entry {
var key: Int
var val: String
init(key: Int, val: String) {
self.key = key
self.val = val
}
}
/* */
class ArrayHashMap {
private var buckets: [Entry?] = []
init() {
// 100
for _ in 0 ..< 100 {
buckets.append(nil)
}
}
/* */
private func hashFunc(key: Int) -> Int {
let index = key % 100
return index
}
/* */
func get(key: Int) -> String? {
let index = hashFunc(key: key)
let pair = buckets[index]
return pair?.val
}
/* */
func put(key: Int, val: String) {
let pair = Entry(key: key, val: val)
let index = hashFunc(key: key)
buckets[index] = pair
}
/* */
func remove(key: Int) {
let index = hashFunc(key: key)
// nil
buckets[index] = nil
}
/* */
func entrySet() -> [Entry] {
var entrySet: [Entry] = []
for pair in buckets {
if let pair = pair {
entrySet.append(pair)
}
}
return entrySet
}
/* */
func keySet() -> [Int] {
var keySet: [Int] = []
for pair in buckets {
if let pair = pair {
keySet.append(pair.key)
}
}
return keySet
}
/* */
func valueSet() -> [String] {
var valueSet: [String] = []
for pair in buckets {
if let pair = pair {
valueSet.append(pair.val)
}
}
return valueSet
}
/* */
func print() {
for entry in entrySet() {
Swift.print("\(entry.key) -> \(entry.val)")
}
}
}
@main
enum _ArrayHashMap {
/* Driver Code */
static func main() {
/* */
let map = ArrayHashMap()
/* */
// (key, value)
map.put(key: 12836, val: "小哈")
map.put(key: 15937, val: "小啰")
map.put(key: 16750, val: "小算")
map.put(key: 13276, val: "小法")
map.put(key: 10583, val: "小鸭")
print("\n添加完成后,哈希表为\nKey -> Value")
map.print()
/* */
// key value
let name = map.get(key: 15937)!
print("\n输入学号 15937 ,查询到姓名 \(name)")
/* */
// (key, value)
map.remove(key: 10583)
print("\n删除 10583 后,哈希表为\nKey -> Value")
map.print()
/* */
print("\n遍历键值对 Key->Value")
for entry in map.entrySet() {
print("\(entry.key) -> \(entry.val)")
}
print("\n单独遍历键 Key")
for key in map.keySet() {
print(key)
}
print("\n单独遍历值 Value")
for val in map.valueSet() {
print(val)
}
}
}