1

似乎有两种方法可以将元素动态添加到表中

table.insert(t, index, value) -- optional index

t[#t+1] = value

根据文档,如果索引被取消,table.insert(t, value)应该表现得完全像t[#t+1] = value.

出于某种原因,即使我只在表中存储了两个值,但当我使用 迭代时,我看到了四个条目ipairs

words = {}
for i = 0, 1 do  
   local word = io.read()   -- word is familiarize
   table.insert(words , word)
   -- american to english spelling
   word = word:gsub("ze","se") 
   table.insert(words , word)
end

for i,v in ipairs(words) do
    print(i,v)
end

-- prints
-- 1    
-- 2    
-- 3    familiarize
-- 4    familiarise

知道这两个额外的条目是从哪里来的吗?

4

1 回答 1

3

(我假设你打算insert进入words,而不是t。)

你仍然绕着那个循环走两次;一次i == 0又一次i == 1。我们可以添加一些打印来演示:

words = {}
for i = 0, 1 do
    print "inserting two..."
    local word = "familiarize"
    table.insert(words, word)
    -- american to english spelling
    word = word:gsub("ze","se")
    table.insert(words, word)
end

for i,v in ipairs(words) do
    print(i,v)
end

这给出了以下输出:

inserting two...
inserting two...
1   familiarize
2   familiarise
3   familiarize
4   familiarise

这应该让事情更清楚。

于 2013-10-17T21:10:01.960 回答