自动分配特定的表键

时间:2017-12-16 22:27:01

标签: lua key lua-table

我有三张桌子。 一个是整数,一个是字符串,一个是空的。 所有三个表都自动填充。 一旦填充了前两个表(两个表都具有相同的条目),我希望第三个表填充自己,其中每个条目的键是表'a'中的值,每个条目的值是表'b'中的值。表'a'将始终具有唯一值。我是lua的新手,所以请尽可能具体。

示例:

a = {"joe", "bob", "bill"}
b = {"24", "111", "32"}
c = {joe = "24", bob = "111", bill = "32"}

我当前的表格是这样创建的:

a = {}
b = {}
c = {}

functionThatPopulatesTableA()
end

for i, #a do
   b[i] = functionThatReturnsSpecificValue()
end

我填写表c的尝试最终看起来像这样:

function charlie()
    for k, v in pairs(a) do
        c[v] = a[v]
        c[k] = b[v]
    end
end

毋庸置疑,这不起作用。

2 个答案:

答案 0 :(得分:0)

你需要更关键地思考"键"和"价值观"在每种情况下。

尝试像计算机那样思考:

window.addEventListener('scroll', function(e) { 
    let headerColor = (window.scrollY) > 100 ? 'red' : 'blue';
    console.log(headerColor);
});

因此,您的示例中的for k, v in pairs(a) do c[v] = a[v] c[k] = b[v] end 循环将如下所示:

a

因此,k v -------------- 1 "joe" 2 "bob" 3 "bill" 变为c[v] = a[v],变为c["joe"] = a["joe"],因为c["joe"] = nil未定义。所以很明显,这不会起作用。

现在,让我们看看有效的功能:

a["joe"]

这仍然不是完全正确,但它最终最终会为你工作。例如,使用与以前相同的示例,for k, v in pairs(a) do c[k] = a[v] c[v] = b[k] end 变为c[k] = a[v],后者变为c[1] = a["joe"],因为c[1] = nila["joe"]。这行可以从函数中删除,因为它实际上没有做任何事情;所有未定义的表值都是nil

接下来,nil变为c[v] = b[k],后者变为c["joe"] = b[1],这就是您想要的。

答案 1 :(得分:0)

我假设你的桌子是& b只是值的数组:

a = {"joe", "bob", "bill"}
b = {"24", "111", "32"}

在这种情况下(如果你里面没有nil个值)你可以使用common for循环(#length运算符,它可以为你提供数组大小)

--handling case when tables have different number of elements
local minSize = math.min(#a, #b)
for i = 1, minSize do
    local key = a[i] -- take key from table a
    c[key] = b[i] -- put appropriate value from b
end

如果您的表格中包含nil值,则此代码将无效:

a = {"joy", nil, "bill" } 
b = {"24", nil, "32"}

所以使用nil值使用对(我修复了你的代码 - 见注释):

for k, v in pairs(a) do
    -- k is equal to index in table a
    -- v is table value for this index        
    c[v] = b[k]
end

如果我们将上面的表作为示例,它将按以下方式工作:

for loop started
picked k = 1, v = "joe"
c["joe"] = b[1]
picked k = 3, v = "bill" (remember, we set element 2 to nil?
c["bill"] = b[3]
for loop ended