Изменение элементов
Элемент списка работает как переменная: ему можно присвоить новое значение через =. Слева напишите имя списка и индекс в квадратных скобках, как при чтении элемента:
local plots = {"морковь", "картофель", "тыква"}
plots[2] = "помидор"
print(plots[1], plots[2], plots[3])Выведется:
морковь помидор тыкваВторой элемент теперь "помидор", а старый "картофель" пропал. Остальные элементы остались прежними. Числа в списке меняются так же. В Lua нет +=, поэтому элемент пишут с обеих сторон:
local eggs = {4, 6, 5}
eggs[3] = eggs[3] + 2
print(eggs[3])Выведется:
7Не пишите == вместо =. plots[2] == "помидор" — это сравнение, а не команда, и на отдельной строке оно приводит к ошибке syntax error near '=='.
Добавление элемента в конец. У места сразу после последнего элемента индекс #plots + 1. Если присвоить значение туда, список вырастет на один элемент:
local plots = {"морковь", "картофель"}
plots[#plots + 1] = "пшеница"
plots[#plots + 1] = "кукуруза"
print(#plots, plots[3], plots[4])Выведется:
4 пшеница кукурузаПосле первого присваивания в списке три элемента, поэтому второе кладёт "кукуруза" на индекс 4. Так можно заполнить и список, который сначала пуст: local harvest = {}, а затем harvest[#harvest + 1] = … столько раз, сколько нужно.
Не оставляйте дыр. Элементы списка должны лежать под индексами 1, 2, 3… без пропусков. Если присвоить элемент дальше, чем #plots + 1, или поставить nil в элемент посередине, в списке появится дыра, и # перестаёт быть надёжным:
local crops = {"морковь", "картофель", "тыква", "пшеница"}
crops[2] = nil
print(#crops)
local more = {"морковь", "картофель", "тыква"}
more[5] = "кукуруза"
print(#more)Выведется:
4
3В первом списке осталось только три культуры, но # говорит 4. Во втором четыре культуры, но # говорит 3: он вообще не видит "кукуруза". При дыре # может досчитать до дыры, а может пройти дальше, и Lua не обещает, что именно. Поэтому добавляйте элементы только на #t + 1, а удаляйте так, как показано в следующем упражнении.
Задание
- 1
Картофель убрали, и на его месте Эмма посадила помидоры. Ниже
printзамените второй элементplotsна"помидор". - 2
Эмма вскопала новую грядку под пшеницу. Добавьте
"пшеница"в конец списка, на индекс#plots + 1. - 3
В конце программы выведите число грядок, вторую грядку и последнюю, каждое на отдельной строке. Последнюю получите через
#plots:Грядок: 4 Вторая: помидор Последняя: пшеница