LUA使用字符串从表中获取值

时间:2018-02-02 11:53:39

标签: loops lua lua-table

我如何使用字符串从表中编译值? 即

NumberDef = {
[1] = 1,
[2] = 2,
[3] = 3
}

TextDef = { 
["a"] = 1,
["b"] = 2,
["c"] = 3
}

如果我是要求" 1ABC3",我怎么能输出1 1 2 3 3?

非常感谢任何回应。

2 个答案:

答案 0 :(得分:3)

试试这个:

s="1ABC3z9"

t=s:gsub(".",function (x)
    local y=tonumber(x)
    if y~=nil then
        y=NumberDef[y]
    else
        y=TextDef[x:lower()]
    end
    return (y or x).." "
end)

print(t)

如果将两个表合并为一个,可以简化这一过程。

答案 1 :(得分:1)

您可以像这样访问lua数组中的值:

表名[" IndexNameOrNumber"]

使用您的示例:

NumberDef = {
[1] = 1,
[2] = 2,
[3] = 3
}

TextDef = { 
["a"] = 1,
["b"] = 2,
["c"] = 3
}

print(NumberDef[2])--Will print 2
print(TextDef["c"])--will print 3

如果你想访问Lua数组的所有值,你可以循环遍历所有值(类似于c#中的foreach):

for i,v in next, TextDef do
print(i, v) 
end
--Output:
--c    3
--a    1
--b    2

因此,要回答您的请求,您可以请求这些值:

print(NumberDef[1], TextDef["a"], TextDef["b"], TextDef["c"], NumberDef[3])--Will print   1 1 2 3 3

还有一点,如果您对连接lua字符串感兴趣,可以这样完成:

string1 = string2 .. string3

示例:

local StringValue1 = "I"
local StringValue2 = "Love"

local StringValue3 = StringValue1 .. " " .. StringValue2 .. " Memes!"
print(StringValue3) -- Will print "I Love Memes!"

<强>更新 我掀起了一个快速的示例代码,您可以使用它来处理您正在寻找的内容。这将通过输入的字符串,如果您请求的值存在,则检查两个表中的每一个。如果是这样,它会将它添加到字符串值并在最后打印最终产品。

local StringInput = "1abc3" -- Your request to find  
local CombineString = "" --To combine the request

NumberDef = {
[1] = 1,
[2] = 2,
[3] = 3
}

TextDef = { 
["a"] = 1,
["b"] = 2,
["c"] = 3
}

for i=1, #StringInput do --Foreach character in the string inputted do this
    local CurrentCharacter = StringInput:sub(i,i); --get the current character from the loop position
    local Num = tonumber(CurrentCharacter)--If possible convert to number

    if TextDef[CurrentCharacter] then--if it exists in text def array then combine it
        CombineString = CombineString .. TextDef[CurrentCharacter] 
    end
    if NumberDef[Num] then --if it exists in number def array then combine it
        CombineString = CombineString .. NumberDef[Num] 
    end
end

print("Combined: ", CombineString) --print the final product.