List Operations
A list is constructed by specifying a sequence of comma (,)
separated values of the element type, surrounded by brackets ([]) .
For instance, an example literal for List(Double) is [3.5, 6.7, 8.3] and an example for
List(String) is ["HCL", "Detect"]. An empty
list requires casting to define its type. As an example, an empty
List(String) can be specified as
List(String)([]).
An expression in HCL
Detect Expression Language can contain a few basic list operations:
containment (in), non-containment (not in), indexing ([i]), slicing
([i:j]), concatenation (+), and size inquiring
(size()).
Containment yields a Boolean answer, identifying whether an element is contained
within a list. For instance, 3in[2,5,3] yields
true, whereas 8 in [2, 5,
3] yields false. Non-containment is the negated
version of the containment. For instance, 3 not in
[2, 5, 3] yields false, whereas 8 not in [2, 5, 3] yields
true.
Indexing yields the element at the specified index within the list.
0-based indexing is used and indices are of type
Int32. For instance, [2, 5,
3][1] yields 5, and [2, 5, 3][-3] yields 2. The index should be between
-size and size-1, inclusive. An index that is
out of these bounds will result in an evaluation error at runtime.
Slicing yields a sub-list. The start index is inclusive, whereas the end index is
exclusive. If the range is out of bounds, then an empty list is returned. For
instance, [2,5,3,7][1:2] yields [5], [2, 5, 3, 7][1:3] yields [5, 3], [2, 5,
3, 7][1:1] yields [], [2, 5, 3, 7][3:5] yields [7], [2, 3, 4][-2:-1] yields [3],
[2, 3, 4][-5:-1] yields [2, 3], [2, 3,
4][1, 6] yields [3, 4], and
[2, 5, 3, 7][4:6] yields
[].
Concatenation results in a list that contains the elements from the first list
followed by the elements from the second list. For instance,
[1,2]+[3] yields [1, 2, 3].
The size of a list can be retrieved via the builtin function
list.size().