2016-09-04 3 views

ответ

5

Вы можете использовать string.format(). Ссылка на форматирование такая же, как в ISO sprintf() и printf(). Для быстрой справки вы можете использовать, например. this website.

print(string.format("%10d%10d%10d", 114, 523, 15224)) 

приведет:

 114  523  15224 

В принципе вы можете пойти с (для целых чисел):

function printTable(t, length) 
    for _,row in pairs(t) do 
     local format = "" 
     for i=1,#row do format = format .. "%" .. length .. "d" end 
     print(string.format(format, table.unpack(row))) 
    end 
end 

Это не самый эффективный способ, но он будет делать работу:

> S = {{432, 324, 5325, 4356}, {4325, 5643, 223, 543}, {234, 1, 23, 656}} 
> printTable(S, 8) 
    432  324 5325 4356 
    4325 5643  223  543 
    234  1  23  656 
+0

'print' также автоматически добавляет вкладку между строкой представление его аргументов, например. 'print (114, 523, 15224)' будет выводить '114 \ t523 \ t15224'. Вы можете включить в ответ способ распаковать таблицу (я не уверен, что это необходимо в вопросе, но, тем не менее,). – user6245072

+0

Действительно, это добавляет табулатуру, но это не так, как работает 'setw'. Другое дело, что он не сделает их равными в виде таблицы, которые OP хотел достичь, @ user6245072. – Green

+0

Правильно, я не совсем понял, что у него должно получиться, но новый отредактированный ответ помогает. +1 – user6245072

Смежные вопросы