Dictionary 调用Lua中具有公用键的值
1是否有一种方法可以编写一个函数,仅基于两个值具有相同键的事实将它们相乘?以下是我想到的一些psudocode:Dictionary 调用Lua中具有公用键的值,dictionary,functional-programming,lua,Dictionary,Functional Programming,Lua,1是否有一种方法可以编写一个函数,仅基于两个值具有相同键的事实将它们相乘?以下是我想到的一些psudocode: operation = {a=12, b=7, c=31} operator1 = {a=0.5} operator2 = {a=0.7} operator3 = {b=0.3} function Operate(x) return x.common_key * operation.common_key end print (Operate (operator1)) pri
operation = {a=12, b=7, c=31}
operator1 = {a=0.5}
operator2 = {a=0.7}
operator3 = {b=0.3}
function Operate(x)
return x.common_key * operation.common_key
end
print (Operate (operator1))
print (Operate (operator3))
---> 6
---> 2.1
这段代码当然不起作用,因为“公共密钥”不是真的。它是函数参数与“操作”字典的共同点的替代。在本例中,它将是“a”,因此该函数将“operator1.a”和“operation.a”相乘(如果可以)。您可以使用
pairs
函数在一个表上迭代,允许您检查它有哪些键可用。此外,如果k是“name”字符串,您可以使用t[k]符号而不是t.name来访问表,如果您访问的键不是lua tables,则lua tables返回nil
function find_common_keys(t1, t2)
for k,v1 in pairs(t1) do
local v2 = t2[k]
if v2 ~= nil then
print("Found match", k, v1, v2)
end
end
end
函数操作(x)本地k,v=下一个(x)返回操作[k]*v结束
此操作非常有效!我只是不知道怎么做。我将阅读手册中的“下一个”函数……因为操作符只有一个值,如果循环只运行一次,我无法证明它是正确的。类似于返回x[1]*操作[x[1]]这样的东西怎么样?@etothepowerprofx:ipairs在内部使用next
来迭代表。如果知道表只有一个键,则可以使用它。除此之外,使用next/ipairs是查看哪些键是表的一部分的唯一方法。就我个人而言,我要么将输入格式更改为更易于使用的格式(比如,operator1={key=“a”,value=0.5}
),要么运行一次循环并将结果缓存到某个地方。在阅读了《下一步和结对》的手册部分后,第27次您的建议终于被点击了。谢谢@埃托普洛夫:哈哈哈,很抱歉我第一次没能让人容易理解:)