Lua表格,#无法正常工作

我想要一个如下所示的表格:

local Users = {}
local function GetUsers (user)
--遍历所有用户

  local Id = GetUserID (user)
  local Age = GetAge (user)
  local Type = GetType (user)
  --Id 返回用户的ID(大约8个字符长度:27296654)
  table.insert (Users, {[Id] = {Age = Age, Type = Type}}
end

它按预期工作,但是

#Users == 0

如果我调用Users [Id] .Age,它会返回正确的值。

如何使起作用? 因为我想遍历所有用户以检查是否有多个用户或缺少用户。 它们需要通过IDS进行分类。 我还考虑将ID转换为单词,使用string.char() 因为单词将按我想要的方式进行计数。

我想用

for i = 1,#Users do

一个示例表格如下:

Users = {
  [12345678] = {Age = 18,Type = 1}
  [62952766] = {Age = 22,Type = 1}
  [23456788] = {Age = 33,Type = 1}
}

因此# Users对我来说必须是3,但是它显示为0。 但是我可以从表格中调用年龄和类型,这意味着它们已经存在。 当索引是如此高的数字时,表格是否存在问题?

点赞
用户2982437
用户2982437

查看 # 操作符文档

表 t 的长度 **被定义为任何整数索引 n,使得 t [n] 不为 nil且 t [n +1] 为 nil **;此外,如果 t [1] 为 nil,则 n 可以为零。 对于正则数组,其非 nil 值从 1 到给定的 n,其长度正好为 n,其最后一个值的索引。 如果数组具有“孔”(即,在其他非 nil 值之间有 nil 值),则 #t 可以是直接在 nil 值之前的任何索引(即,它可以将任何此类 nil 值视为数组的结尾)。

您正在使用 _字典_,因此 # operator 不会按您预期的方式工作。唯一的方法是使用 pairs(..)遍历整个表。

function getTableLength(T)
    local count = 0
    for _ in pairs(T) do
        count = count + 1
    end
    return count
end
2015-11-19 07:31:22