반응형
Lua- 테이블 병합?
주어진 항목이 둘 다에있는 경우 두 번째 테이블의 내용을 첫 번째 내용을 작성하는 두 테이블을 병합해야합니다. 나는 그러나 표준 라이브러리는 제공하지 않는 것입니다. 어디에 있습니까?
for k,v in pairs(second_table) do first_table[k] = v end
Doug Currie의 답변을 기반으로 한 것은 다음과 가능합니다.
function tableMerge(t1, t2)
for k,v in pairs(t2) do
if type(v) == "table" then
if type(t1[k] or false) == "table" then
tableMerge(t1[k] or {}, t2[k] or {})
else
t1[k] = v
end
else
t1[k] = v
end
end
return t1
end
제대로 작동하지 않습니까?
function merge(t1, t2)
for k, v in pairs(t2) do
if (type(v) == "table") and (type(t1[k] or false) == "table") then
merge(t1[k], t2[k])
else
t1[k] = v
end
end
return t1
end
숫자 보강 테이블 병합의 경우 :
for k,v in pairs(secondTable) do table.insert(firstTable, v) end
재귀의 중복 스택 오버플로가 마음에 들지 않기 때문에 깊은 병합을 반복 버전이 있습니다.
local merge_task = {}
function merge_to_left_o(orig, new)
merge_task[orig] = new
local left = orig
while left ~= nil do
local right = merge_task[left]
for new_key, new_val in pairs(right) do
local old_val = left[new_key]
if old_val == nil then
left[new_key] = new_val
else
local old_type = type(old_val)
local new_type = type(new_val)
if (old_type == "table" and new_type == "table") then
merge_task[old_val] = new_val
else
left[new_key] = new_val
end
end
end
merge_task[left] = nil
left = next(merge_task)
end
end
Doug Currie의 대답은 대부분의 경우 가장 간단합니다. 보다 강력한 테이블 병합이 필요한 경우 Penlight 라이브러리 의 방법을 사용하는 것이 좋습니다.merge()
require 'pl'
pretty.dump(tablex.merge({a=1,b=2}, {c=3,d=4}, true))
-- {
-- a = 1,
-- d = 4,
-- c = 3,
-- b = 2
-- }
나는 단순함을 위해 James 버전을 선호하고 내 utils.lua에서 사용했습니다. 오류 처리를 위해 테이블 유형에 대한 검사를 추가했습니다.
function merge(a, b)
if type(a) == 'table' and type(b) == 'table' then
for k,v in pairs(b) do if type(v)=='table' and type(a[k] or false)=='table' then merge(a[k],v) else a[k]=v end end
end
return a
end
당신이 호출 할 수 있도록 테이블 클래스의 일부가되어야이 좋은 기능을 주셔서 감사 a:merge(b)
하지만, 일을하는 table.merge = function(a, b) ...
나를 위해 작동하지 않았다. 진짜 바보를 위해 하나의 라이너로 압축 될 수도 있습니다 :)
for k,v in pairs(t2) do t1[k] = v end
문자열 솔루션의 키
참조 URL : https://stackoverflow.com/questions/1283388/lua-merge-tables
반응형
'ProgramingTip' 카테고리의 다른 글
Mercurial 작업 트리에서 모든 .orig 파일을 자동으로 제거하는 방법은 무엇입니까? (0) | 2021.01.10 |
---|---|
C에서 동적으로 할당 된 메모리의 크기 결정 (0) | 2021.01.10 |
JPA, Mysql Blob이 너무 긴 데이터를 반환 함 (0) | 2021.01.10 |
데이터베이스 연결을 닫는 가장 좋은 장소 (0) | 2021.01.10 |
속성에 관련 화되지 않음 (0) | 2021.01.10 |