Массивы
В какой-то момент времени у программистов возникла потребность манипулировать большим количеством данных, перебирать их, где-то складировать, быстро удалять и подобные операции, тогда были созданы массивы (в нашем случае списки)
В прошлых главах, если вы заметили, в типах данных уже мелькало %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