X-Git-Url: http://nitlanguage.org diff --git a/lib/core/collection/abstract_collection.nit b/lib/core/collection/abstract_collection.nit index 5cffbec..04dabfa 100644 --- a/lib/core/collection/abstract_collection.nit +++ b/lib/core/collection/abstract_collection.nit @@ -385,7 +385,7 @@ end interface SimpleCollection[E] super RemovableCollection[E] - # Add an item in a collection. + # Add `item` to this collection. # # var a = [1,2] # a.add 3 @@ -457,7 +457,9 @@ interface Set[E] var res = 23 + length # Note: the order of the elements must not change the hash value. # So, unlike usual hash functions, the accumulator is not combined with itself. - for e in self do res += e.hash + for e in self do + if e != null then res += e.hash + end return res end @@ -857,6 +859,36 @@ interface SequenceRead[E] end end + # Try to get an element, return `null` if the `index` is invalid. + # + # ~~~ + # var a = [10,20,30] + # assert a.get_or_null(1) == 20 + # assert a.get_or_null(3) == null + # assert a.get_or_null(-1) == null + # assert a.get_or_null(-10) == null + # ~~~ + fun get_or_null(index: Int): nullable E + do + if index >= 0 and index < length then return self[index] + return null + end + + # Try to get an element, return `default` if the `index` is invalid. + # + # ~~~ + # var a = [10,20,30] + # assert a.get_or_default(1, -1) == 20 + # assert a.get_or_default(3, -1) == -1 + # assert a.get_or_default(-1, -1) == -1 + # assert a.get_or_default(-10, -1) == -1 + # ~~~ + fun get_or_default(index: Int, default: E): E + do + if index >= 0 and index < length then return self[index] + return default + end + # Get the last item. # Is equivalent with `self[length-1]`. #