使用string.gsub在Lua中格式化表

使用string.gsub在Lua中格式化表,lua,formatting,gsub,lua-table,Lua,Formatting,Gsub,Lua Table,下面的代码将表格格式化为可打印的字符串,但我觉得这样做要容易得多 function printFormat(table) local str = "" for key, value in pairs(table) do if value == 1 then str = str .. string.gsub(value, 1, "A, ") -- Replaces 1 with A elseif value == 2 the

下面的代码将表格格式化为可打印的字符串,但我觉得这样做要容易得多

function printFormat(table)
    local str = ""

    for key, value in pairs(table) do
        if value == 1 then
            str = str .. string.gsub(value, 1, "A, ") -- Replaces 1 with A
        elseif value == 2 then
            str = str .. string.gsub(value, 2, "B, ") -- Replaces 2 with B
        elseif value == 3 then
            str = str .. string.gsub(value, 3, "C, ") -- Replaces 3 with C
        elseif value == 4 then
            str = str .. string.gsub(value, 4, "D, ") -- Replaces 4 with D
        end
    end
    str = string.sub(str, 1, #str - 2) -- Removes useless chars at the end (last comma and last whitespace)
    str = "<font color=\"#FFFFFF\">" .. str .. "</font>" -- colors the string

    print(str)
end

local myTable = {1,4,3,2,3,2,1,3,4,2,2,...}
printFormat(myTable)   
函数打印格式(表)
本地str=“”
对于键,成对值(表)do
如果值==1,则
str=str。。gsub(值,1,“A”-用A替换1
elseif值==2,然后
str=str。。gsub(值,2,“B”),用B替换2
elseif值==3,则
str=str。。gsub(值为3,“C”),用C替换3
elseif值==4,然后
str=str。。gsub(值为4,“D”),用D替换4
结束
结束
str=string.sub(str,1,#str-2)——删除结尾的无用字符(最后一个逗号和最后一个空格)
str=“”。。str。。“”为字符串着色
打印(str)
结束
局部myTable={1,4,3,2,3,2,1,3,4,2,2,…}
打印格式(myTable)
有没有一种方法可以使用一行程序,而不必循环遍历每个索引并进行更改


还是让代码更紧凑

您可以使用助手表替换多个
if
语句:

local chars = {"A", "B", "C", "D"}
for _, v in ipairs(t) do
    str = str .. chars[v] .. ", "
end
或者,如果有多个
1
4
,请尝试以下操作:

for _, v in ipairs(t) do
    str = str .. string.char(string.byte('A') + v) .. ", "
end
  • 使用
  • 可以使用替换表执行替换
  • 不要为自己的变量使用
    table
    之类的名称
  • 因此:

    function printFormat( tInput )
        local sReturn = table.concat( tInput, ', ' )
        sReturn = sReturn:gsub( '%d', {['1'] = 'A', ...} ) -- update table accordingly
        return '<font color="#FFFFFF">' .. str .. "</font>"
    end
    
    函数打印格式(tInput)
    本地sReturn=table.concat(tInput,,)
    sReturn=sReturn:gsub('%d',{['1']='A',…})--相应地更新表
    返回“”。。str。。""
    结束
    
    对于一艘班轮:

    return '<font color="#FFFFFF">' .. ( table.concat(tInput, ', ') ):gsub( '%d', {['1'] = 'A', ...}  )
    
    返回“”。。(table.concat(tInput,,):gsub('%d',{['1']='A',…})
    
    str=table.concat(myTable,,):gsub(“%d+”,{['1']='A',['2']='B',['3']='C',['4']='d'})
    我非常喜欢这段代码。谢谢你的发帖!关于如何在代码中添加“a”、“B”、“C”、“D”的智能计数器,有什么想法吗?(例如,A出现了多少次,B出现了多少次,等等)我结束了选择这个答案,因为它更灵活,因为for循环,即使hjpotter的更紧凑。谢谢!