标签: lua-table

如何使用C API创建嵌套的Lua表

我想创建一个像这样的表

myTable = {
    [0] = { ["a"] = 4, ["b"] = 2 },
    [1] = { ["a"] = 13, ["b"] = 37 }
}
Run Code Online (Sandbox Code Playgroud)

使用C API?

我目前的做法是

lua_createtable(L, 0, 2);
int c = lua_gettop(L);
lua_pushstring(L, "a");
lua_pushnumber(L, 4);
lua_settable(L, c);
lua_pushstring(L, "b");
lua_pushnumber(L, 2);
lua_settable(L, c);
Run Code Online (Sandbox Code Playgroud)

在循环中创建内部表.之前,这个循环,我用

lua_createtable(L, 2, 0);
int outertable = lua_gettop(L);
Run Code Online (Sandbox Code Playgroud)

为2个数字槽创建外部表.

但是如何将内部表保存到外部表?

c++ lua lua-api lua-table

8
推荐指数
2
解决办法
2万
查看次数

弹出数组中的第一个元素

x在Lua 有一个数组.我想设置head = x[1]rest =数组的休息,让rest[1] = x[2],rest[2] = x[3]等.

我怎样才能做到这一点?

(注意:我不在乎原始数组是否会发生变异.在Javascript中我会这样做,head = x.shift()并且x会包含剩余的元素.)

arrays lua lua-table

8
推荐指数
2
解决办法
2万
查看次数

Lua - 将表转换为逗号分隔列表

我需要将表转换为逗号分隔列表,以便将其保存到文本文件中.是否有内置的方法在Lua中执行此操作?

csv lua lua-table

8
推荐指数
2
解决办法
7804
查看次数

Lua:删除重复的元素

我在lua有一张桌子

test = {1,2,4,2,3,4,2,3,4,"A", "B", "A"}

我想删除表中的所有重复元素.
输出应该是

test = {1,2,4,3,"A","B"}

编辑:

我的尝试:

> items = {1,2,4,2,3,4,2,3,4,"A", "B", "A"}
> flags = {}
> for i=1,table.getn(items)  do
if not flags[items[i]] then
      io.write(' ' .. items[i])
      flags[items[i]] = true
   end
>> end
 1 2 4 3 A B>

现在工作正常.感谢您的回答和评论.

lua lua-table

8
推荐指数
1
解决办法
9696
查看次数

Redis - Lua表作为返回值 - 为什么这不起作用

当我通过redis EVAL运行此代码时,它不会返回任何结果.知道为什么这不起作用吗?

redis-cli EVAL "$(cat bug.lua)" 0
Run Code Online (Sandbox Code Playgroud)

bug.lua

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

return retv
Run Code Online (Sandbox Code Playgroud)

如果我初始化表,那么单独打印值.

$ cat bug.lua 
--!/usr/bin/env lua


local retv = {"This", "is", "a", "bug" }
retv["test"] = 1000

return retv

$ redis-cli EVAL "$(cat bug.lua)" 2 a b
1) "This"
2) "is"
3) "a"
4) "bug"
Run Code Online (Sandbox Code Playgroud)

lua redis lua-table

8
推荐指数
2
解决办法
5529
查看次数

如何从最终迭代Lua表?

如何从末尾迭代一个简单的Lua表,这是一个序列

想要的行为示例:

local mytable = {'a', 'b', 'c'}
for i, value in reversedipairs(mytable) do
    print(i .. ": " .. value)
end
Run Code Online (Sandbox Code Playgroud)

应该输出

3: c
2: b
1: a
Run Code Online (Sandbox Code Playgroud)

这里怎么实现reversedipairs

lua reverse iterator lua-table

8
推荐指数
2
解决办法
9079
查看次数

如何检查lua表是否只包含连续数字索引?

如何编写一个函数来确定它的表参数是否为真数组?

isArray({1, 2, 4, 8, 16}) -> true
isArray({1, "two", 3, 4, 5}) -> true
isArray({1, [3]="two", [2]=3, 4, 5}) -> true
isArray({1, dictionaryKey = "not an array", 3, 4, 5}) -> false
Run Code Online (Sandbox Code Playgroud)

我看不出有什么方法可以找出数字键是否是唯一的键.

arrays lua dictionary lua-table

7
推荐指数
2
解决办法
3927
查看次数

Lua:将表中的每个新元素设置为默认值

我想在字符串中获得最常见的k大小的子字符串.为此,我使用表来存储每个子字符串的出现次数.这是代码:

function frequentWords(seq, k)
  local subs = ""
  local counter = {}
  for i = 1,(seq:len()-k+1) do
    subs = seq:sub(i, i+k-1)
    counter[subs] = (counter[subs] and counter[subs] + 1 or 1)
    --print(subs .. ": " .. counter[subs])
  end
end
Run Code Online (Sandbox Code Playgroud)

该线counter[subs] = (counter[subs] and counter[subs] + 1 or 1)具有相同的平均值 counter[subs] = (counter[subs] ? counter[subs]+1 : 1).这条线只有counter[subs] = counter[subs] + 1在我们可以设置每个新counter元素时才会这样0.Lua有可能这样吗?如果不是,做类似事情的最佳方法是什么?

例如,在Ruby中,这是通过像这样声明一个Hash来完成的:

counter = Hash.new(0)
Run Code Online (Sandbox Code Playgroud)

hash lua lua-table

7
推荐指数
1
解决办法
813
查看次数

Lua表转换

我是lua的新手,我有一张桌子foo,我想把它转换成bar如下:

foo:{key1,value2,key2,value2} ==> bar:{key1=value1,key2=value2}
Run Code Online (Sandbox Code Playgroud)

lua有内置方法吗?

lua lua-table

7
推荐指数
1
解决办法
138
查看次数

全局变量_G有多特别?

摘录自Lua 5.3手册:

_G

保存全局环境的全局变量(不是函数)(参见§2.2).Lua本身不使用这个变量; 改变其价值不会影响任何环境,反之亦然.

相关部分来自§2.2

[...]每个块都在一个名为的外部局部变量的范围内编译_ENV,因此_ENV它本身永远不是块中的自由名称.

[...]

用作值的任何表_ENV称为环境.

Lua保持着一个称为全球环境的杰出环境.此值保存在C注册表中的特殊索引处.在Lua中,全局变量_G使用相同的值进行初始化.(_G从不在内部使用.)

当Lua加载块时,其_ENVupvalue 的默认值是全局环境.因此,默认情况下,Lua代码中的自由名称是指全局环境中的条目

我的理解是,每块装,因为_ENV是第一的upvalue,它指出,全球环境表,通过指出_Gload.

> =_G, _ENV
table: 006d1bd8 table: 006d1bd8
Run Code Online (Sandbox Code Playgroud)

确认两者都指向同一张表.手册陈述,而不是多次保证,_ENV并且_G只是普通的名称,没有隐藏的意义,Lua本身不在内部使用它.我在下面尝试了这个块:

local a = { }
local b = a      -- since tables are objects, both refer to the same table object
print(a, b)      -- same address printed twice
a = { }          -- …
Run Code Online (Sandbox Code Playgroud)

environment lua global-variables lua-table

7
推荐指数
1
解决办法
6866
查看次数