Skip to content

Instantly share code, notes, and snippets.

@scizzorz
Last active August 29, 2015 13:57
Show Gist options
  • Save scizzorz/9603239 to your computer and use it in GitHub Desktop.
Save scizzorz/9603239 to your computer and use it in GitHub Desktop.
Update to use builtin hash()
class CArray:
def __init__(self, size):
self.size = size
self.array = [[]] * self.size
def __setitem__(self, key, value):
self.array[hash(key) % self.size].append((key, value))
def __getitem__(self, key):
for k, v in self.array[hash(key) % self.size]:
if k is key:
return v
return None
import unittest
from functools import reduce
class Bunny:
def __init__(self, name, age):
self.name = name
self.age = age
def __hash__(self):
return self.age + reduce(lambda a, x: a + ord(x), self.name, 0)
def __str__(self):
return '{} : {}'.format(self.name, self.age)
def __lt__(self, other):
return self.name < other.name
class Tester(unittest.TestCase):
def setUp(self):
self.ca = CArray(20)
self.philip = Bunny('Philip', 11)
self.ca[self.philip] = 'Dave'
self.ca[Bunny('Steve', 0)] = 'Dave Jr'
def test_simple(self):
self.assertEqual('Dave', self.ca[self.philip])
def test_collision(self):
self.ca[Bunny('Steve', 6)] = 'James'
self.assertEqual('Dave', self.ca[self.philip])
if __name__ == '__main__':
unittest.main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment