46 lines
1.4 KiB
Python
46 lines
1.4 KiB
Python
class Student:
|
|
def __init__(self, number, name, email):
|
|
self.number = number
|
|
self.name = name
|
|
self.email = email
|
|
self.MAX_HASH =100000
|
|
|
|
def __str__(self):
|
|
return f"Student: {self.name} ({self.email}, {self.number})"
|
|
|
|
def __hash__(self):
|
|
return (id(self.number) + id(self.name) + id(self.email)) % self.MAX_HASH
|
|
|
|
|
|
class HashTable:
|
|
def __init__(self, elements):
|
|
self.bucket_size = len(elements) * 3
|
|
self.buckets = [[] for i in range(self.bucket_size)]
|
|
self._assign_buckets(elements)
|
|
self.insertion_order = []
|
|
|
|
def __iter__(self):
|
|
ret_list = []
|
|
for index, obj_id in self.insertion_order:
|
|
for obj in self.buckets[index]:
|
|
if id(obj) == obj_id:
|
|
ret_list.append(obj)
|
|
return iter(ret_list)
|
|
|
|
def _assign_buckets(self, elements):
|
|
for obj in elements:
|
|
hashed_value = hash(obj)
|
|
index = hashed_value % self.bucket_size
|
|
self.buckets[index].append(obj)
|
|
self.insertion_order.insert((index, id(obj)))
|
|
|
|
def get_value(self,input_key):
|
|
return self.buckets[input_key]
|
|
|
|
def main():
|
|
arthur = Student("097", "Arthur", "artur@blade.hex")
|
|
eleanor = Student("098", "Eleanor", "eleano@plague.hex")
|
|
aoi = Student("099", "Aoi", "aoi@magnet.hex")
|
|
hash_table = HashTable([arthur,eleanor,aoi])
|
|
|