Lua 将数组中的某些value设置为nil,打印#数组的长度遇到的问题。

 

参考:https://blog.csdn.net/qq_32319583/article/details/53384945
代码部分

 1 -- 初始化一个数组,数组中不存在为nil
 2 local t = { 1, "a", "a", 2, 4, 5, 6, 7, "a"}
 3 
 4 print("设置前t的长度为 : " .. #t)
 5 
 6 for i=#t,1,-1 do
 7     if t[i] ~= "a" then
 8         t[i] = nil  -- 第一步
 9         -- table.remove(t, i) -- 第二步
10     end
11     print(i, t[i])
12 end
13 
14 print("-------分割线----------")
15 
16 for k,v in pairs(t) do
17     print(k,v)
18 end
19 print("-------分割线----------")
20 print("设置后t的长度为 : " .. #t)

 

看注释标有第一步的输出打印

设置前t的长度为 : 9
9	a
8	nil
7	nil
6	nil
5	nil
4	nil
3	a
2	a
1	nil
-------分割线----------
2	a
3	a
9	a
-------分割线----------
设置后t的长度为 : 9

看注释第二步的输出打印

设置前t的长度为 : 9
9	a
8	a
7	a
6	a
5	a
4	a
3	a
2	a
1	a
-------分割线----------
1	a
2	a
3	a
-------分割线----------
设置后t的长度为 : 3

结论:
如果单纯将数组中的值设为nil,#t的长度可能不会变
要想得到正确的结果,最好用table.remove(t, k)

 

posted @ 2019-07-05 20:01  李小样bro  阅读(308)  评论(0编辑  收藏  举报