def get_hash(key):
hash = 0
for char in key: #遍历key的每一个char
hash += ord(char) #计算所有char的ASCII值的和
return hash % 100 #计算hash值
get_hash('march 6')
此处特别强调哈希值的计算过程,后面会将此函数封装到哈希表类中。
class HashTable:
def __init__(self):
self.MAX = 10 #定义哈希表长度为10
self.arr = [None for i in range(self.MAX)] #初始化hash数组全为None
#获取哈希值
def get_hash(self,key):
hash = 0
for char in key:
hash += ord(char)
return hash % self.MAX
#将hash值以及对应val放入哈希表中
def add(self,key,val):
h = self.get_hash(key)
self.arr[h] = val
#通过key获得对应的val,中间用了一个哈希转换
def get(self,key):
h = self.get_hash(key)
return self.arr[h] #返回哈希值在arr中的值
测试:
t = HashTable() #实例化
t.add('March 1',100) #添加key、value
t.add('March 2',200)
t.add('March 3',300)
t.add('March 4',400)
t.arr #打印哈希数组
t.get('March 4') #查找key对应的val
class HashTable:
def __init__(self):
self.MAX = 10 #定义哈希表长度为100
self.arr = [None for i in range(self.MAX)] #初始化hash数组全为None
#获取哈希值
def get_hash(self,key):
hash = 0
for char in key:
hash += ord(char)
return hash % self.MAX
#添加key,value
def __setitem__(self, key, val):
h =self.get_hash(key)
self.arr[h] = val
#通过key查value
def __getitem__(self,key):
h = self.get_hash(key)
return self.arr[h]
#删除某个key(在arr中将其设为None即可)
def __delitem__(self,key):
h = self.get_hash(key)
self.arr[h] = None
测试:
t = HashTable()
t['March 1'] = 100 #添加key,value
t['March 2'] = 200
t['March 3'] = 300
t['March 4'] = 400
t['March 5'] = 500
t['March 5'] #查找March 5
t['March 4'] #查找March 4
del t['March 3'] #删除March 3
t.arr #将发现March 3对应的值变成None