Как автоматически добавить строку в конец строки таблицы

#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
  

Теперь я могу посчитать любое количество элементов в столбце / вложенной колонке и добавить к ней.

Проблема, с которой я столкнулся при использовании числовых индексов, заключается в том, что это делает код нечитаемым, я не знал, что к чему. При этом я все еще могу использовать строковые индексы и подсчитывать их. Это компромисс. Еще одна функция или оператор # .

Приветствия