我有三张桌子。 一个是整数,一个是字符串,一个是空的。 所有三个表都自动填充。 一旦填充了前两个表(两个表都具有相同的条目),我希望第三个表填充自己,其中每个条目的键是表'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
毋庸置疑,这不起作用。
答案 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] = nil
为a["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