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

以下代码将表格格式化为可打印的字符串,但我觉得这可以更容易地完成。

function printFormat(table)
    local str = ""

    for key, value in pairs(table) do
        if value == 1 then
            str = str .. string.gsub(value, 1, "A, ") -- 将1替换为A
        elseif value == 2 then
            str = str .. string.gsub(value, 2, "B, ") -- 将2替换为B
        elseif value == 3 then
            str = str .. string.gsub(value, 3, "C, ") -- 将3替换为C
        elseif value == 4 then
            str = str .. string.gsub(value, 4, "D, ") -- 将4替换为D
        end
    end
    str = string.sub(str, 1, #str - 2) -- 删除末尾无用的字符(最后一个逗号和最后一个空格)
    str = "<font color=\"#FFFFFF\">" .. str .. "</font>" -- 为字符串着色

    print(str)
end

local myTable = {1,4,3,2,3,2,1,3,4,2,2,...}
printFormat(myTable)

有没有办法使用一行代码来代替必须循环遍历每个指数并进行更改的方法?

或者使代码更简洁?

点赞
用户1009479
用户1009479

你可以使用一个辅助表来替代多个 if 语句:

local chars = {"A", "B", "C", "D"}
for _, v in ipairs(t) do
    str = str .. chars[v] .. ", "
end

或者,如果是 14 以外的数字,可以尝试以下方法:

for _, v in ipairs(t) do
    str = str .. string.char(string.byte('A') + v) .. ", "
end
2015-08-09 14:34:54
用户1190388
用户1190388
  1. 使用 table.concat
  2. string.gsub 可以使用替换表进行替换。
  3. 不要将类似 table 这样的名称用于自己的变量中。

因此:

function printFormat( tInput )
    local sReturn = table.concat( tInput, ', ' )
    sReturn = sReturn:gsub( '%d', {['1'] = 'A', ...} ) -- 根据需要更新表格
    return '<font color="#FFFFFF">' .. str .. "</font>"
end

而且,对于一行代码:

return '<font color="#FFFFFF">' .. ( table.concat(tInput, ', ') ):gsub( '%d', {['1'] = 'A', ...}  )
2015-08-09 15:15:16