Lua table.concat

不羁岁月 提交于 2019-12-13 14:25:50

问题


Is there a way to use the arg 2 value of table.concat to represent the current table index?

eg:

 t = {}
 t[1] = "a"
 t[2] = "b"
 t[3] = "c"

 X = table.concat(t,"\n")

desired output of table concat (X):

 "1 a\n2 b\n3 c\n"

回答1:


Simple answer : no.

table.concat is something really basic, and really fast.

So you should do it in a loop anyhow.

If you want to avoid excessive string concatenation you can do:

function concatIndexed(tab,template)
    template = template or '%d %s\n'
    local tt = {}
    for k,v in ipairs(tab) do
        tt[#tt+1]=template:format(k,v)
    end
    return table.concat(tt)
end
X = concatIndexed(t) -- and optionally specify a certain per item format
Y = concatIndexed(t,'custom format %3d %s\n')



回答2:


I don't think so: how would you tell it that the separator between keys and values is supposed to be a space, for example?

You can write a general mapping function to do what you'd like:

function map2(t, func)
  local out = {}
  for k, v in pairs(t) do
    out[k] = func(k, v)
  end
  return out
end

function joinbyspace(k, v) 
  return k .. ' ' .. v 
end

X = table.concat(map2(t, joinbyspace), "\n")



回答3:


No. But there is a work around:

local n = 0
local function next_line_no()
   n = n + 1
   return n..' '
end

X = table.concat(t,'\0'):gsub('%f[%Z]',next_line_no):gsub('%z','\n')


来源:https://stackoverflow.com/questions/15477596/lua-table-concat

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!