LUA 使用字符串从 table 获取值
LUA getting values from table by using a string
我将如何使用字符串从 table 编译值?
即
NumberDef = {
[1] = 1,
[2] = 2,
[3] = 3
}
TextDef = {
["a"] = 1,
["b"] = 2,
["c"] = 3
}
例如,如果我要请求“1ABC3”,我如何让它输出 1 1 2 3 3?
非常感谢任何回复。
您可以像这样访问 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 字符串感兴趣,可以这样完成:
字符串 1 = 字符串 2 .. 字符串 3
示例:
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.
试试这个:
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)
如果您将两个表合并为一个,这可能会得到简化。
我将如何使用字符串从 table 编译值? 即
NumberDef = {
[1] = 1,
[2] = 2,
[3] = 3
}
TextDef = {
["a"] = 1,
["b"] = 2,
["c"] = 3
}
例如,如果我要请求“1ABC3”,我如何让它输出 1 1 2 3 3?
非常感谢任何回复。
您可以像这样访问 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 字符串感兴趣,可以这样完成:
字符串 1 = 字符串 2 .. 字符串 3
示例:
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.
试试这个:
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)
如果您将两个表合并为一个,这可能会得到简化。