Lua Tables,#不能正常工作

时间:2015-11-19 07:15:37

标签: lua lua-table

我想要一张如下表格:

var dst,src = { "edf" : {"zyx" : "right"} };
dst = JSON.parse(JSON.stringify(src));
dst["a"] = 1;
src.edf.zyx = "wrong";
console.log(src, dst);

这是应该的,但

local Users = {}
local function GetUsers (user)
--cycle through all Users

  local Id = GetUserID (user)
  local Age = GetAge (user)
  local Type = GetType (user)
  --Id returns ID of User (value about 8   char length: 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必须为3,但它显示为0。 但我可以称之为Age并输入表格,这意味着他们在。 当索引这么高的数字时,表是否有问题?

1 个答案:

答案 0 :(得分:4)

看看#operator documentation

  

表t的长度被定义为任何整数索引n,使得t [n]不是nil而t [n + 1]是nil ;此外,如果t 1为零,则n可以为零。对于常规数组,非n值从1到给定n,其长度恰好是n,即其最后一个值的索引。如果阵列有"孔" (也就是说,其他非零值之间的nil值),那么#t可以是直接在nil值之前的任何索引(也就是说,它可以将任何这样的nil值视为数组的末尾)。

您正在使用词典,因此# operator并不像您期望的那样工作。唯一的方法是使用pair(..)迭代整个表。

function getTableLength(T)
    local count = 0
    for _ in pairs(T) do 
        count = count + 1 
    end
    return count
end