Итоги
В этом уроке вы узнали, что:
- Таблица может быть словарём:
{carrot = 12, potato = 30}хранит пары «ключ—значение». Другого типа для словарей в Lua нет; список — это таблица с ключами 1, 2, 3… - Значение читают через точку,
barn.carrot, или в квадратных скобках,barn["carrot"]. Ключ с пробелом нужно записывать в скобках и кавычках:["sweet corn"] = 9. - Присваивание меняет значение или добавляет новый ключ (
barn.eggs = 18); присвоивnil, ключ удаляют. Отсутствующий ключ даётnil, а не ошибку, иbarn.pumpkin or 0превращает его в значение по умолчанию.#не считает ключи словаря. - Если ключ лежит в переменной, используйте квадратные скобки без кавычек:
prices[crop].prices.crop— это ключ"crop". for key, value in pairs(t)проходит по всем ключам в неопределённом порядке. Чтобы вывести ключи по порядку, соберите их в список, отсортируйте черезtable.sortи пройдите по нему черезipairs.counts[x] = (counts[x] or 0) + 1считает; скобки здесь важны.- Запись — это таблица, которая описывает одну вещь, с фиксированными полями:
{name = "Морковь", days = 3}. Список записей обрабатывают черезipairs: суммы, фильтры, поиск записи. - Таблицы можно вкладывать друг в друга:
farm.barn.eggs. Чтение через отсутствующую таблицу заканчивается ошибкойattempt to index a nil value (field 'shed'). - Переменная хранит ссылку на таблицу: ни
local b = a, ни передача таблицы в функцию её не копируют.{} == {}— этоfalse. Чтобы получить отдельную таблицу, скопируйте её черезpairs.
После этого урока будет ещё один небольшой проект, фермерская лавка, где функции и словари пойдут в дело. А потом в уроке «Строки» вы будете работать со строками: вырезать из них части, искать в них, выравнивать по столбцам и разбирать на слова и числа.
Теперь немного практики. На этой неделе Эмма вела дневник урожая: что она собирала каждый день и сколько.
Задание
- 1
Напишите функцию
totals(records), которая возвращает словарь: для каждой культуры — сколько всего её собрала Эмма. Затем выведите итоги, отсортировав их по названию культуры:carrot: 25 potato: 35 pumpkin: 3 - 2
Напишите функцию
worth(amounts, priceList), которая получает словарь итогов и прайс-лист и возвращает, сколько монет стоит весь урожай. Выведите:Стоимость: 465 монет - 3
Наконец, выведите
По количеству:, а под ним ещё раз культуры, от наибольшего количества к наименьшему. Отсортируйте список культур функцией сравнения, которая сравнивает их итоги:По количеству: potato: 35 carrot: 25 pumpkin: 3