4.4 KiB
List built-in class
Mutable list of any objects.
It's class in Lyng is List
:
[1,2,3]::class
>>> List
you can use it's class to ensure type:
[]::class == List
>>> true
Indexing
indexing is zero-based, as in C/C++/Java/Kotlin, etc.
val list = [10, 20, 30]
list[1]
>>> 20
There is a shortcut for the last:
val list = [10, 20, 30]
[list.last, list.lastIndex]
>>> [30, 2]
Important negative indexes works wherever indexes are used, e.g. in insertion and removal methods too.
Concatenation
You can concatenate lists or iterable objects:
assert( [4,5] + [1,2] == [4,5,1,2])
assert( [4,5] + (1..3) == [4, 5, 1, 2, 3])
>>> void
Appending
To append to lists, use +=
with elements, lists and any Iterable instances, but beware it will
concatenate Iterable objects instead of appending them. To append Iterable instance itself, use list.add
:
var list = [1, 2]
val other = [3, 4]
// appending lists is clear:
list += other
assert( list == [1, 2, 3, 4] )
// but appending other Iterables could be confusing:
list += (10..12)
assert( list == [1, 2, 3, 4, 10, 11, 12])
// now adding list as sublist:
list.add(other)
assert( list == [1, 2, 3, 4, 10, 11, 12, [3,4]])
>>> void
Removing elements
List is mutable, so it is possible to remove its contents. To remove a single element by index use:
assertEquals( [1,2,3].removeAt(1), [1,3] )
assertEquals( [1,2,3].removeAt(0), [2,3] )
assertEquals( [1,2,3].removeLast(), [1,2] )
>>> void
There is a way to remove a range (see Range for more on ranges):
assertEquals( [1, 4], [1,2,3,4].removeRange(1..2))
assertEquals( [1, 4], [1,2,3,4].removeRange(1..<3))
>>> void
Open end ranges remove head and tail elements:
assertEquals( [3, 4, 5], [1,2,3,4,5].removeRange(..1))
assertEquals( [3, 4, 5], [1,2,3,4,5].removeRange(..<2))
assertEquals( [1, 2], [1,2,3,4,5].removeRange( (2..) ))
>>> void
Comparisons
assert( [1, 2] != [1, 3])
assert( [1, 2, 3] > [1, 2])
assert( [1, 3] > [1, 2, 3])
assert( [1, 2, 3] == [1, 2, 3])
assert( [1, 2, 3] != [1, 2, "three"])
// note that in the case above objects are referentially different:
assert( [1, 2, 3] !== [1, 2, 3])
>>> void
Members
name | meaning | type |
---|---|---|
size |
current size | Int |
add(elements...) |
add one or more elements to the end | Any |
insertAt(index,elements...) |
insert elements at position | Int, Any |
removeAt(index) |
remove element at position | Int |
remove(from,toNonInclusive) |
remove range from (incl) to (nonincl) | Int, Int |
remove(Range) |
remove range | Range |
removeLast() |
remove last element | |
removeLast(n) |
remove n last elements | Int |
contains(element) |
check the element is in the list (1) | |
[index] |
get or set element at index | Int |
[Range] |
get slice of the array (copy) | Range |
+= |
append element(s) | List or Obj |
- (1)
- optimized implementation that override
Array
one - (2)
+=
append either a single element, or all elements if the List or other Iterable instance is appended. If you want to append an Iterable object itself, useadd
instead.
It inherits from Iterable too.
Member inherited from Array
name | meaning | type |
---|---|---|
last |
last element (throws if empty) | |
lastOrNull |
last element or null | |
lastIndex |
Int | |
indices |
range of indexes | Range |
contains(item) |
test that item is in the list |
- (1)
- end-inclisiveness allows to use negative indexes to, for exampe, remove several last elements, like
list.removeRangeInclusive(-2, -1)
will remove two last elements.