Массивы

районы, жилые кварталы, я ухожу, ухожу красиво.

В какой-то момент времени у программистов возникла потребность манипулировать большим количеством данных, перебирать их, где-то складировать, быстро удалять и подобные операции, тогда были созданы массивы (в нашем случае списки)

В прошлых главах, если вы заметили, в типах данных уже мелькало %objects%, %texts%, %numbers% и т.д, так вот отличие от аналогичных типов без s в том, что там были списки. Так в чем же отличия списков от обычных переменных? В ‘::’. Приведем пример обычного списка, который не имеет значений:

{_list::*}

Так выглядит пример списка, с виду очень похоже на обычную переменную, но это не так Теперь попробуем задать списку значения:

set {_list::*} to 2,3,4,5

Теперь в нашем списке 4 значения, это числа от 2 до 5. Используя такой вид присвоения, мы можем легко обращаться к списку при помощи индексирования, элементы будут располагаться начиная от индекса 1, заканчивая их количеством:

broadcast "%{_list::1}%"
broadcast "%{_list::2}%"
broadcast "%{_list::3}%"
broadcast "%{_list::4}%"

Выполнив этот код, в чат будут выведены значения списка, с индексами 1,2,3,4, что соответствует ранее заданным значениям 2,3,4,5 Запомните, ::* - обратиться ко всему списку с его элементами, ::%text% - обратиться к конкретному элементу с его уникальным индексом. Как вы заметили, указано %text%, то есть индекс может быть не только числом, но задавать это уже придется вручную:|

set {_list::first} to 1
set {_list::second} to 2
set {_list::YAebanat} to 5
...

Соответственно, чтобы обращаться к этим элементам, придется указывать именно эти индексы.

Кроме этого, существуют вложенные списки внутри списков:

set {_list::*} to 1,2,3,4
set {_list::1::*} to "Hello world!",1,2,3

Удалив {_list::*} мы также удалим все вложенные списки внутри него:

delete {_list::*}
broadcast "%{_list::1::*}%"

Будет выведено ‘’", так как список пустой. Изучим парочку важных выражений для работы со списками:

add %objects% to %list%

Добавляет указанные значения в указанный список, причем в самый его конец (если были использованы не числовые индексы, то значения добавятся начиная с 1)

НОТИС ТУТ ДАНГЕР

Осторожно, данная конструкция вызывает перебор всего цикла для добавления значений

indexes of %list%

Возвращает список индексов списка

size of %list%

Возвращает количество элементов списка - число.

Теперь вспомним про циклы из прошлой главы, конкретно loop %objects%: Данная конструкция позволяет нам проитерировать все элементы списка, причем ранее изученное выражение loop-value теперь будет принимать значение текущего элемента итерации, а loop-index будет являться индексом данного элемента списка. Пример:

set {_list::*} to 3,2,1
set {_list::start} to "hello"
loop {_list::*}:
  broadcast "Index: %loop-index% Value: %loop-value%"

В чат будет выведено:

Index: 1 Value: 3
Index: 2 Value: 2
Index: 3 Value: 1
Index: start Value: hello