求助,不懂这个,lua的基本知识

local t1 = {"\",“1”,“2”,“3”,“6”,“5”,a=1,b=2,c=3}

t2={}
for i,v in ipairs(t1) do
t2[v] = i
end

for i=1, 6 do
print(t2["""…i…"""])
print("""…i…""")
end
print("*************")
print(t2[“1”]…t2[“2”]…t2[“3”]…t2[“6”]…t2[“5”])

输出值是:
nil
“1”
nil
“2”
nil
“3”
nil
“4”
nil
“5”
nil
“6”


23456

为什么输出的值是nil

lua 是一个没有 [] 这样子数组的语言。所有类似功能都由 {} 这样子的table实现。

如果要实现一个数组:

arr = {1,2,3}

其等效于:

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

也就是说,key为连续的正整数,那么这个table就等效于数组。(课后思考一下如果不连续会怎么办)

当key为字符串时,这个table就可以当作是一个dict,有key和value 。例如

tb = {
  a = hello,
  ["b"] = world,
}

此时,使用tb[“a”] , tb[“b”]就可以分别取出hello和world。(课后思考一下如果一个table中放入两种类型key会如何)

然后就是迭代函数 ipairs()和pairs()的区别了。这里有个文章你可以详细了解一下。

lua 中pairs 和 ipairs区别

我这里是t2["""…i…"""]这个,print("""…i…""")已经输出"1"了.我t2里面就类似{“1”=1,“2”=2,“3”=3…}了,同样我用t2[“1”]已经可以取到value为1,但是我想通过一个循环,拼接出一个key=“1”,取出来的值是nil,这才是我的疑问

抱歉,没理解题意,这个问题我就不清楚了。

print(t2["""…i…"""])改成print(t2[tostring(i)])就可以了
当i=1时,"""…i…""" 结果是 ““1"“而不是"1”,多出了2个双引号
你试试
local i = 1
print(””"…i…""")
print(“1”)
就知道两者的区别了

1赞

哦,thanks