有什么方法可以在lua中组合两个表吗?

问题描述 投票:0回答:1

就像我有两张桌子:

{["a"] = "aaa"}
{["b"] = "bbb"}
并把它做成一张表:
{["a"] = "aaa", ["b"] = "bbb"}

我已经尝试过这段代码:

function ListConcat(t1,t2)
    for i=1,#t2 do
        t1[#t1+1] = t2[i]
    end
    return t1
end

local function getkeys(tab)
    local keyset={}
    local n=0
    for k,v in pairs(tab) do
        n=n+1
        keyset[n]=k
    end
    return keyset
end

local function has_value (tab, val)
    for index, value in ipairs(tab) do
        if value == val then
            return true
        end
    end

    return false
end

function TableConcat(t1, t2)
    local key1s = getkeys(t1)
    local key2s = getkeys(t2)
    local keys = ListConcat(key1s, key2s)
    local rtb = {}
    for i=1,#keys do
        local key = keys[i]
        if has_value(key1s, key) then
            rtb[key] = t1[key]
        else
            rtb[key] = t2[key]
        end
    end
    return rtb
end

我哪里错了,有更简单的解决方案吗? 没有任何作用,尝试了其他代码。而且我不需要像其他人的问题一样打印它。

虚拟代码:

local funcs = require("funcs")
a = {["a"] = "a"}
b = {["b"] = "b"}
print(funcs.TableConcat(a, b)) -- Wanted: {["a"] = "a", ["b"] = "b"}
                               -- Returns: {["a"] = "a"}
lua lua-table
1个回答
0
投票

这是一种非常复杂的方法。

无论如何,错误在于

ListConcat
。该函数应该返回一个新列表,但您实际上正在修改第一个列表并返回该列表。这导致
key1s
keys
将相同。这使得

    if has_value(key1s, key) then

对于所有键都是如此。

一个更简单的解决方案就是这样做

function TableConcat(t1, t2)
    local rtb = {}
    for k,v in pairs(t2) do
        rtb[k] = v
    end
        for k,v in pairs(t1) do
        rtb[k] = v
    end
    return rtb
end

© www.soinside.com 2019 - 2024. All rights reserved.