2013-03-18 1 views
3

현재 테이블 인덱스를 나타 내기 위해 table.concat의 arg 2 값을 사용하는 방법이 있습니까?루아 table.concat

예 :

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

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

원하는 테이블 CONCAT (X)의 출력 :

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

답변

6

간단한 답 : 아니오.

table.concat은 정말 빠르고 기본적인 것입니다.

그래서 어쨌든 반복해야합니다.

당신은 당신이 할 수있는 과도한 문자열 연결을 피하려면 : 당신은`템플릿 의미하지 않는다

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') 
+0

을 : 형식을 ...'? – Cubic

+0

감사합니다. BTW, 이와 같은 오류가 발견되면 편집 권한이 있으므로 직접 답변을 편집하십시오. – jpjacobs

4

호 그러나 주위에 일이 :

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') 
7

나는 생각하지 않는다는 그래서 : 키와 값 사이의 구분 기호가 공백으로되어 있다고 예를 들어 설명하겠습니까?

당신은 당신이 원하는 것을 할 일반적인 매핑 기능을 쓸 수 있습니다 :

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")