# List
List
— списочный тип данных.
Список может содержать элементы разных типов, в том числе вложенные списки.
Количество элементов списка — не более 1000. Глубина вложенности не ограничена. Ограничения по весу см. в разделе Вес данных.
# Операции со списками
Списки поддерживают конкатенацию, добавление элементов в начало и конец списка.
Операция | Обозначение | Сложность |
---|---|---|
Конкатенация | ++ | 4 |
Добавление элемента в конец списка (слева список, справа элемент) | :+ | 1 |
Добавление элемента в начало списка (слева элемент, справа список) | :: | 2 |
# Примеры
nil :+ 1 :+ 2 :+ 3
Результат: [1, 2, 3]
1 :: 2 :: 3 :: nil
Результат: [1, 2, 3]
let intList = [1, 2] # List[Int]
let strList = ["3", "4"] # List[String]
let joined = intList ++ strList # List[Int|String]
joined
Результат: [1, 2, "3", "4"]
let appended = joined :+ true # List[Boolean|Int|String]
appended
Результат: [1, 2, "3", "4", true]
let nested = intList :: joined # List[Int|List[Int]|String]
nested
Результат: [[1, 2], 1, 2, "3", "4"]
# Функции списка
Встроенные функции работы со списками представлены в разделе Функции списка.
Операции над списком удобно выполнять с помощью макроса FOLD<N>. Размер списка должен быть известен заранее.
# Список как аргумент функции
Список, в том числе вложенный, может быть аргументом функции:
func foo(arg: List[String|Unit]) = {
...
}
foo(["Ride","Waves",unit])
func bar(arg: List[List[Int]]) = {
...
}
bar([[1],[],[5,7]])
Вызываемая функция может принимать список в качестве аргумента, однако вложенные списки не допускаются:
@Callable(i)
func join(strings: List[String]) = {
[
StringEntry(toBase58String(i.caller.bytes), strings[0] + "_" + strings[1] + "_" + strings[2])
]
}
Пример транзакции вызова скрипта:
{
"type": 16,
...
"call": {
"function": "join",
"args": [
{
"type": "list",
"value": [
{
"type": "string",
"value": "alpha"
},
{
"type": "string",
"value": "beta"
},
{
"type": "string",
"value": "gamma"
}
]
}
]
},
...
}