Lua表的初始化-这里有什么不正确的地方。

我正在尝试初始化和打印一张表格,但是它不起作用。有什么想法这段代码哪里有问题吗?

--!/usr/bin/env lua

local retv = {}
retv["test"] = 1000

for k,v in ipairs(retv) do
    print (k,v)
end

它什么也没打印出来。我确定我缺少了一些非常基本的东西,但我无法弄清楚。

点赞
用户1442917
用户1442917

你需要使用 pairs 而不是 ipairspairs 将遍历所有键,ipairs 只会遍历 从 1 开始没有间隙的整数序列键。(这些键是存储在数组部分还是哈希表部分都是实现细节,可能在表的生命周期内发生变化。)

例如,ipairs({'a', 'b', nil, 'c'}) 将遍历键 1 和 2,并停止于(不包括)键 3,因为该键在表中缺失。

2014-06-18 20:04:30
用户3204551
用户3204551

Lua中有两种for循环形式:

数字和通用for循环。

ipairs(t)是一个迭代器构造函数,返回适用于通用for循环的最多三个参数,允许您按顺序迭代初始序列(索引1,2,3,...)。

可能的实现:

function ipairs(t)
  local i = 0
  return function()
    i = i + 1
    if t [i]~ = nil then
      返回i,t [i]
    end
  end
end
local function ipairs_helper(t,i)
  i = i + 1
  if t [i]~ = nil then
    返回i,t [i]
  end
end
function ipairs(t)
  返回ipairs_helper,t,0
end

如您所见,这将永远不会返回具有键“test”的条目。

您要使用的是pairs(t),等同于next,t

这将迭代所有元素。

2014-06-18 20:26:37