如何在Lua中获取第一个表格值

有更容易的方法吗?我需要获取一个表中的第一个值,这个表的索引是整数,但可能不是从 [1] 开始。谢谢!

local tbl = {[0]='a',[1]='b',[2]='c'}  -- arbitrary keys
local result = nil
for k,v in pairs(tbl) do -- might need to use ipairs() instead?
    result = v
    break
end
点赞
用户3080396
用户3080396

pairs() 函数返回 next() 函数,用于迭代表格。Lua 5.2 手册对于 next 函数有这样的说明:

指定枚举索引的顺序是没有保证的,即便是对于数字索引也是如此。(为了按照数字顺序遍历表格,请使用数字类型的 for 循环。)

你需要迭代这个表格,直到找到对应的键。可以使用以下代码:

local i = 0
while tbl[i] == nil do i = i + 1 end

上面的代码片段假设表格至少有一个整数索引。

2015-01-08 22:11:25
用户646619
用户646619

如果表可以从零或一开始,但不能从其他位置开始:

if tbl[0] ~= nil then
    return tbl[0]
else
    return tbl[1]
end

-- 或者如果表永远不会存储 false
return tbl[0] or tbl[1]

否则,只能通过 pairs 来迭代整个表,因为键可能不再存储在数组中,而是存储在无序哈希集合中:

local minKey = math.huge
for k in pairs(tbl) do
    minKey = math.min(k, minKey)
end
2015-01-08 22:11:55
用户1923636
用户1923636

可以在不使用当前状态的情况下调用第一个迭代器,它将返回初始值,但顺序仍不保证。

a = {[1]="I", [2]="II", [3]="III"}
-- 创建迭代器
iter = pairs(a)

print("第一次调用迭代器")
currentKey, currentValue = iter(a)
print(currentKey, currentValue)

print("第二次调用迭代器")
currentKey, currentValue = iter(a, currentKey)
print(currentKey, currentValue)

print("第三次调用迭代器")
currentKey, currentValue = iter(a, currentKey)
print(currentKey, currentValue)

print("第四次调用迭代器")
currentKey, currentValue = iter(a, currentKey)
print(currentKey, currentValue)
2022-08-28 17:01:03
用户2383363
用户2383363

在 Lua 中,索引以 1 为基础,不存在类似于 [0] 的东西... 它从 [1] 开始。

2022-11-06 00:45:37