Итоги
В этом уроке вы узнали, что:
- Таблица — единственный способ Lua собирать значения вместе. Таблица, в которой значения хранятся по порядку, — это список:
local crops = {"морковь", "картофель"}. Пустой список —{}. - Индексы начинаются с 1:
crops[1]— первый элемент. Индекс, под которым нет элемента, напримерcrops[0]или на единицу больше длины, даётnil, а не ошибку. Ошибка возникает позже, когда вы используетеnil:attempt to concatenate a nil value (field '?'). #crops— длина списка, аcrops[#crops]— его последний элемент.crops[2] = "помидор"меняет элемент, аcrops[#crops + 1] = "кукуруза"добавляет его в конец. Не оставляйте дыр (nilмежду элементами):#иipairsперестают работать надёжно.table.insert(t, value)добавляет элемент в конец, аtable.insert(t, position, value)вставляет его на позицию и сдвигает остальные вправо.table.remove(t)удаляет последний элемент,table.remove(t, position)— элемент на позиции, и обе возвращают удалённый элемент.for i = 1, #crops doпроходит по всем индексам (не с 0 и не до#crops + 1).for i, crop in ipairs(crops) doв каждой итерации даёт индекс и элемент, а_обозначает ненужное значение.print(crops)выводит только адрес таблицы,table: 0x….table.concat(crops, ", ")соединяет строки и числа в одну строку с разделителем между ними.- Приёмы со списками: сумма (начните с 0 до цикла, выводите после цикла), среднее (
total / #t, всегда дробное число, округляется черезstring.format("%.1f", …)) и наибольшее или наименьшее значение (начните с первого элемента и храните его индекс, если нужно знать, где он лежит). table.sort(t)сортирует числа от меньшего, а строки — по кодам символов, причём заглавные буквы идут раньше строчных. Она меняет список и ничего не возвращает.
После этого урока вас ждёт ещё один небольшой проект — тыквенная ярмарка, где циклы и списки будут работать вместе. Затем в уроке о функциях вы научитесь писать собственные функции и с их помощью сортировать список в любом порядке. Но сначала повторите изученное на урожае помидоров Эммы.
Задание
- 1
Прошло ещё два дня. Добавьте
8и5в конецharvest, а затем выведите весь список с помощьюtable.concat:Урожай: 6, 9, 4, 11, 7, 8, 5. - 2
Выведите сумму и среднее с одним знаком после точки:
Всего: 50 кг, в среднем: 7.1 кг. - 3
Найдите лучший день и выведите его номер (индекс) и сколько Эмма собрала в этот день:
Лучший день: 4 (11 кг). - 4
Наконец, отсортируйте
harvestи выведите его:Отсортировано: 4, 5, 6, 7, 8, 9, 11.