# List built-in class Mutable set of any objects: a group of different objects, no repetitions. Sets are not ordered, order of appearance does not matter. val set = Set(1,2,3, "foo") assert( 1 in set ) assert( "foo" in set) assert( "bar" !in set) >>> void ## Set is collection and therefore [Iterable]: assert( Set(1,2) is Set) assert( Set(1,2) is Iterable) assert( Set(1,2) is Collection) >>> void So it supports all methods from [Iterable]; set is not, though, an [Array] and has no indexing. Use [set.toList] as needed. ## Set operations // Union assertEquals( Set(1,2,3,4), Set(3, 1) + Set(2, 4)) // intersection assertEquals( Set(1,4), Set(3, 1, 4).intersect(Set(2, 4, 1)) ) // or simple assertEquals( Set(1,4), Set(3, 1, 4) * Set(2, 4, 1) ) // To find collection elements not present in another collection, use the // subtract() or `-`: assertEquals( Set( 1, 2), Set(1, 2, 4, 3) - Set(3, 4)) >>> void ## Adding elements var s = Set() s += 1 assertEquals( Set(1), s) s += [3, 3, 4] assertEquals( Set(3, 4, 1), s) >>> void ## Removing elements List is mutable, so it is possible to remove its contents. To remove a single element by index use: var s = Set(1,2,3) s.remove(2) assertEquals( s, Set(1,3) ) s = Set(1,2,3) s.remove(2,1) assertEquals( s, Set(3) ) >>> void Note that `remove` returns true if at least one element was actually removed and false if the set has not been changed. ## Comparisons and inclusion Sets are only equal when contains exactly same elements, order, as was said, is not significant: assert( Set(1, 2) == Set(2, 1) ) assert( Set(1, 2, 2) == Set(2, 1) ) assert( Set(1, 3) != Set(2, 1) ) assert( 1 in Set(5,1)) assert( 10 !in Set(5,1)) >>> void ## Members | name | meaning | type | |---------------------|--------------------------------------|-------| | `size` | current size | Int | | `+=` | add one or more elements | Any | | `+`, `union` | union sets | Any | | `-`, `subtract` | subtract sets | Any | | `*`, `intersect` | subtract sets | Any | | `remove(items...)` | remove one or more items | Range | | `contains(element)` | check the element is in the list (1) | | (1) : optimized implementation that override `Iterable` one Also, it inherits methods from [Iterable]. [Range]: Range.md