如何从表索引中获取变量

如何将表索引与相应的变量进行比较?

local var1 = 0
local var2 = 5
local var3 = 10

local MyTable = {math.random(0, 10), math.random(0, 10), math.random(0, 10)}

for i, v in ipairs(MyTable) do
    if v = var..i then    --[[ 尝试测试索引值是否等于
                         带 v = var..i 的相应变量,不起作用 ]]
        print("索引 "..i.." 等于变量 "..i)
    end
end

在较大的表中,这可以用 if i == var(x) then.. elseif... 来完成,但这样做只会变得混乱,我想有一个更容易的方法来做。有什么想法吗?谢谢。

原文链接 https://stackoverflow.com/questions/70228824

点赞
stackoverflow用户3574628
stackoverflow用户3574628

只需在表中保留原始变量:

local var = {0, 5, 10}

local MyTable = {}
for i = 1, 3 do
  MyTable[i] = math.random(0, 10)
end

for i, v in ipairs(MyTable) do
  if v == var[i] then
    print("索引 "..i.." 等于变量 "..i)
  end
end
2021-12-04 20:07:53
stackoverflow用户17422280
stackoverflow用户17422280

这可以通过另一种方式解决,但如果您想将变量与表格值进行比较,请使用以下代码:

var1 = 0
var2 = 5
var3 = 10

local MyTable = {math.random(0,10),math.random(0,10),math.random(0,10)}

function GetVariableByValue(val)
    if val == nil then return false end
    for variableName, value in pairs (_G) do
        if val == value then return variableName end
    end
    return false
end

for key , value in ipairs(MyTable) do
    local variableName = GetVariableByValue(value)
    if variableName then
        print("Value : "..value.." is equal to variable : "..variableName);
    else
        print("Value : "..value.." isn't equal to any variable.");
    end
end

如果 MyTable 与变量值不匹配,则您将收到以下消息: “Value : Number isn't equal to any variable.”

2021-12-09 01:18:16