Skip to content

Commit 06d5a6d

Browse files
committed
-
1 parent d1ef3ac commit 06d5a6d

File tree

4 files changed

+33
-12
lines changed

4 files changed

+33
-12
lines changed

source_py3/python_toolbox/nifty_collections/emitting_ordered_set.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,10 @@ def add(self, key):
2727
""" Add an element to a set.
2828
2929
This has no effect if the element is already present. """
30-
if key not in self.map:
31-
end = self.end
30+
if key not in self._map:
31+
end = self._end
3232
curr = end[PREV]
33-
curr[NEXT] = end[PREV] = self.map[key] = [key, curr, end]
33+
curr[NEXT] = end[PREV] = self._map[key] = [key, curr, end]
3434
if self.emitter:
3535
self.emitter.emit()
3636

@@ -39,8 +39,8 @@ def discard(self, key):
3939
""" Remove an element from a set if it is a member.
4040
4141
If the element is not a member, do nothing. """
42-
if key in self.map:
43-
key, prev, next = self.map.pop(key)
42+
if key in self._map:
43+
key, prev, next = self._map.pop(key)
4444
prev[NEXT] = next
4545
next[PREV] = prev
4646
if self.emitter:

source_py3/python_toolbox/nifty_collections/ordered_set.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
KEY, PREV, NEXT = range(3)
1717

1818

19-
class OrderedSet(collections.MutableSet):
19+
class OrderedSet(collections.MutableSet, collections.Sequence):
2020
'''
2121
A set with an order.
2222
@@ -33,7 +33,16 @@ def __init__(self, iterable=None):
3333
def clear(self):
3434
self._end = []
3535
self._end += [None, self._end, self._end]
36-
self._map = {}
36+
self._map = {}
37+
38+
39+
def __getitem__(self, index):
40+
for i, item in enumerate(self):
41+
if i == index:
42+
return item
43+
else:
44+
raise IndexError
45+
3746

3847
def __len__(self):
3948
return len(self._map)
@@ -126,7 +135,6 @@ def sort(self, key=None, reverse=False):
126135
sorted_members = sorted(tuple(self), key=key_function, reverse=reverse)
127136

128137
self.clear()
129-
for member in sorted_members[1:]:
130-
self.move_to_end(member)
138+
self |= sorted_members
131139

132140

source_py3/test_python_toolbox/test_nifty_collections/test_ordered_dict/test.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ def test_sort():
4040
assert second_ordered_dict == \
4141
OrderedDict(((3+1j, 'a'), (1+2j, 'b'), (2+3j, 'c')))
4242

43-
second_ordered_dict.sort('real', reversed=True)
43+
second_ordered_dict.sort('real', reverse=True)
4444
assert second_ordered_dict == \
4545
OrderedDict(((3+1j, 'a'), (2+3j, 'c'), (1+2j, 'b')))
4646

source_py3/test_python_toolbox/test_nifty_collections/test_ordered_set/test.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from python_toolbox.nifty_collections import OrderedSet
99

1010

11-
def test_sort():
11+
def test():
1212
'''Test the basic workings of `OrderedSet`.'''
1313

1414
ordered_set = OrderedSet(range(4))
@@ -25,4 +25,17 @@ def test_sort():
2525
assert list(reversed(ordered_set)) == [8, 3, 1, 0]
2626
assert ordered_set.pop() == 8
2727
assert ordered_set.pop(last=False) == 0
28-
28+
29+
30+
def test_sort():
31+
32+
ordered_set = OrderedSet([5, 61, 2, 7, 2])
33+
assert ordered_set == {5, 61, 2, 7}
34+
ordered_set.move_to_end(61)
35+
assert list(ordered_set) == [5, 2, 7, 61]
36+
ordered_set.sort()
37+
assert list(ordered_set) == [2, 5, 7, 61]
38+
ordered_set.sort(key=lambda x: -x, reverse=True)
39+
assert list(ordered_set) == [2, 5, 7, 61]
40+
41+

0 commit comments

Comments
 (0)