Skip to content

Commit ea92ba4

Browse files
committed
HashTable: Implemented del_ method + unit test
1 parent d2b15d2 commit ea92ba4

File tree

1 file changed

+30
-0
lines changed

1 file changed

+30
-0
lines changed

map/hashtable.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,23 @@ def get(self, key):
5151
# table is full and wrapped around
5252
return None
5353

54+
def del_(self, key):
55+
initial_hash = hash_ = self.hash(key)
56+
while True:
57+
if self._keys[hash_] is self._empty:
58+
# That key was never assigned
59+
return None
60+
elif self._keys[hash_] == key:
61+
# key found, assign with deleted sentinel
62+
self._keys[hash_] = self._deleted
63+
self._values[hash_] = self._deleted
64+
return
65+
66+
hash_ = self.rehash(hash_)
67+
if initial_hash == hash_:
68+
# table is full and wrapped around
69+
return None
70+
5471
def hash(self, key):
5572
return key % self.size
5673

@@ -96,3 +113,16 @@ def test_get_on_full_table_does_halts(self):
96113
for i in range(10, 20):
97114
m.put(i, i)
98115
self.assertEqual(None, m.get(1))
116+
117+
def test_delete_key(self):
118+
m = HashTable(10)
119+
m.put(1, 1)
120+
m.del_(1)
121+
self.assertEqual(None, m.get(1))
122+
123+
def test_delete_key_and_reassign(self):
124+
m = HashTable(10)
125+
m.put(1, 1)
126+
m.del_(1)
127+
m.put(1, 2)
128+
self.assertEqual(2, m.get(1))

0 commit comments

Comments
 (0)