# [Ride v5] List
⚠️ Это документация Стандартной библиотеки версии 5. Рекомендуем использовать версию 6. Перейти к версии 6
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"
               }
            ]
         }
      ]
   },
   ...
}