大数据

Lua table.maxn()

计数.jpg

前言

今天来看一个关于table的一个简单的函数,我们知道Lua数组中的索引一般从1开始,那么数组的length就等于数组的最大索引,但是当数组下标不是连续时,我们要活的最大索引要怎么办,那就需要使用我们今天所讲的函数了。

内容


table.maxn()

  • 原型:table.maxn (tab_table)
  • 解释:返回一个表tab_table中的最大正数索引,如果没有正数索引的话返回0。

Uasge

  • 首先新建一个文件命名为maxntest.lua然后编写如下代码:
-- 各种索引都存在
local tabLanguage = { 
    up ="Lua",
    "c",
    "c++",
    [100] = "end",
    realend = "realend",
    [-1] = "haha";
};

for k,v in pairs(tabLanguage) do
    print(k,v)
end
print("LUA>>>>>>the maxn of table tabLanguage :", table.maxn(tabLanguage), "\n")

-- 使用默认数字索引
local tabTest1 = { 
    "c",
    "c++",
    "php"
};

for k,v in pairs(tabTest1) do
    print(k,v)
end
print("LUA>>>>>>the maxn of table tabTest1 :", table.maxn(tabTest1), "\n")

-- 负数索引
local tabTest2 = { 
    [-1] = "c",
    [-100] = "c++",
    [-10] = "php",
};

for k,v in pairs(tabTest2) do
    print(k,v)
end
print("LUA>>>>>>the maxn of table tabTest2 :", table.maxn(tabTest2), "\n")

-- 非数字索引
local tabTest3 = { 
    first = "c",
    second = "c++",
    third = "php"
};

for k,v in pairs(tabTest3) do
    print(k,v)
end
print("LUA>>>>>>the maxn of table tabTest :", table.maxn(tabTest3), "\n")
  • 运行结果

table_maxn.png

总结

  • 这个函数比较简单,行为和函数解释一致,不要求索引必须连续,返回一个最大的正数索引。
  • 有运行结果可知,当表中只有非数字索引或者负数索引时,函数返回0。
  • 其中官方文档中有一句话,大意是说这个函数的工作原理就是线性的遍历了这个表。