Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dictionary 调用Lua中具有公用键的值_Dictionary_Functional Programming_Lua - Fatal编程技术网

Dictionary 调用Lua中具有公用键的值

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

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)) 
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次您的建议终于被点击了。谢谢@埃托普洛夫:哈哈哈,很抱歉我第一次没能让人容易理解:)