#lua #lua-table
#lua #lua-таблица
Вопрос:
У меня есть таблица, состоящая из нескольких строк и переменного количества столбцов в каждой строке.
Если я хочу добавить данные в новую строку, я просто делаю
table[#table 1] = {['d1'] = data, ['d2'] = data, ... }
Теперь я хотел бы сделать, если я хочу добавить в строку 1 (например):
table[1] = {['d' .. #columns 1] = data}
за исключением того, что это не работает, и я не могу найти решение.
Моя проблема сейчас в том, что когда мой код добавляет данные в уже существующую строку, он перезаписывает существующие данные, а это не то, что я хочу.
Например, в настоящее время это результат для одной строки таблицы:
— Таблица: {4} {[«d3»]=154,04, },
вместо того, чтобы иметь ‘d1’, ‘d2’ и, наконец, ‘d3’, у меня просто есть ‘d3’.
Комментарии:
1. Нет необходимости помечать заголовки.
Ответ №1:
Код
table[1] = {['d' .. #columns] = data}
заменяет значение at table[1]
таблицей справа.
Попробуйте это вместо:
table[1]['d' .. #columns] = data
Комментарии:
1. Выдает ошибку «попытка получить длину глобальных «столбцов» (нулевое значение)», потому что я не знаю, что поставить вместо #columns . Мой вопрос остается, как заменить #columns чем-то, что поместило бы новые данные в конец строки?
2. Попытка добавить запись в таблицу с индексом 1 в
table
будет выглядеть примерно так:table[1][#table[1] 1] = {...}
.3. Я получаю сообщение об ошибке «попытка получить длину поля ‘?’ (нулевое значение)»
4. Есть еще идеи о том, как добавить данные в конец строки в таблице?
5. @lixir, используйте числовые индексы вместо d1 и т.д.
Ответ №2:
Для тех, у кого может возникнуть тот же вопрос, вот самый близкий ответ, к которому я пришел:
#
оператор считает только целочисленные ключи. Поэтому #
не будет учитываться любая таблица, содержащая строковые ключи, такие как table[p1], что было моей проблемой. Я решил это с помощью следующей функции:
function tlength(T)
local count = 0
for _ in pairs(T) do count = count 1 end
return count
end
Теперь я могу посчитать любое количество элементов в столбце / вложенной колонке и добавить к ней.
Проблема, с которой я столкнулся при использовании числовых индексов, заключается в том, что это делает код нечитаемым, я не знал, что к чему. При этом я все еще могу использовать строковые индексы и подсчитывать их. Это компромисс. Еще одна функция или оператор # .
Приветствия