标签: lua-table

如何快速初始化Lua中的关联表?

在Lua中,您可以通过以下方式创建表:

local t = { 1, 2, 3, 4, 5 }
Run Code Online (Sandbox Code Playgroud)

但是,我想创建一个关联表,我必须按以下方式执行:

local t = {}
t['foo'] = 1
t['bar'] = 2
Run Code Online (Sandbox Code Playgroud)

以下是错误:

local t = { 'foo' = 1, 'bar' = 2 }
Run Code Online (Sandbox Code Playgroud)

有没有办法像我的第一个代码片段那样做?

lua initialization lua-table

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

在Lua中对表[]进行排序

我有一个Lua表,我正在尝试排序.表的格式如下:

tableOfKills[PlayerName] = NumberOfKills
Run Code Online (Sandbox Code Playgroud)

这意味着,例如,如果我有一个名为Robin的玩家总共有8个杀戮而另一个名为Jon的玩家共有10个杀戮,那么该表将是:

tableOfKills[Robin] = 8
tableOfKills[Jon]   = 10
Run Code Online (Sandbox Code Playgroud)

我如何对这种类型的表进行排序以首先显示最高的杀戮?提前致谢!

sorting lua lua-table

30
推荐指数
1
解决办法
4万
查看次数

Lua中表的连接

原始邮政

鉴于Lua中没有内置函数,我正在寻找一个允许我将表附加在一起的函数.我搜索了很多,并尝试了我偶然发现的所有解决方案,但似乎都没有正常工作.

场景是这样的:我在应用程序中使用Lua.应用程序的内部命令以表格的形式返回值列表.

我想要做的是在循环中递归调用该命令,并将返回的值再次以表格的形式附加到以前迭代的表中.


编辑

对于那些将来遇到这篇文章的人,请注意@gimf发布的内容.由于Lua中的Tables与其他任何内容一样(即使在列表上下文中),因此没有真正正确的方法将一个表附加到另一个表.最接近的概念是合并表格.请查看帖子" Lua - 合并表? "以获得这方面的帮助.

lua concatenation lua-table

29
推荐指数
6
解决办法
5万
查看次数

table.insert(t,i)和t [#t + 1] = i之间有什么区别?

在Lua中,似乎有两种方法可以将元素附加到数组:

table.insert(t, i)
Run Code Online (Sandbox Code Playgroud)

t[#t+1] = i
Run Code Online (Sandbox Code Playgroud)

我应该使用哪个,为什么?

lua lua-table

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

如何删除Lua表中的所有元素?

如何删除Lua表中的所有元素?我不想这样做:

t = {}
table.insert(t, 1)
t = {}  -- this assigns a new pointer to t
Run Code Online (Sandbox Code Playgroud)

我想保留与t相同的指针,但删除其中的所有元素t.

我试过了:

t = {}
table.insert(t, 1)
for i,v in ipairs(t) do table.remove(t, i) end
Run Code Online (Sandbox Code Playgroud)

以上是否有效?还是需要其他东西?

lua lua-table

23
推荐指数
3
解决办法
4万
查看次数

按Lua中的值关联排序表

我有一个key => value表我想在Lua中排序.键都是整数,但不是连续的(并且有意义).Lua唯一的排序函数似乎是table.sort,它将表视为简单数组,丢弃原始密钥及其与特定项的关联.相反,我基本上希望能够使用PHP的asort()功能.

是)我有的:

items = {
    [1004] = "foo",
    [1234] = "bar",
    [3188] = "baz",
    [7007] = "quux",
}
Run Code Online (Sandbox Code Playgroud)

排序操作后我想要的是:

items = {
    [1234] = "bar",
    [3188] = "baz",
    [1004] = "foo",
    [7007] = "quux",
}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

编辑:根据答案,我将假设它只是我正在使用的特定嵌入式Lua解释器的一个奇怪的怪癖,但在我的所有测试中,pairs()总是按照它们被添加到的顺序返回表项桌子.(即上述两个声明将以不同方式迭代).

不幸的是,因为这不是正常的行为,看起来我无法得到我需要的东西; Lua没有内置的必要工具(当然),嵌入式环境对我来说太有限了.

不过,谢谢你的帮助!

sorting lua asort lua-table

20
推荐指数
3
解决办法
4万
查看次数

通过C++中的Lua表迭代?

我正在尝试将表从Lua加载到C++,但我无法正确使用它.我正在通过第一次迭代就好了,但是在第二次调用lua_next时它崩溃了.有任何想法吗?

Lua文件:

level = { 1, 2, 3, }
Run Code Online (Sandbox Code Playgroud)

C++文件 - 首先我这样做了:

lua_getglobal( L, "level" );
for( lua_pushnil( L ); lua_next( L, 1 ); lua_pop( L, -2 ) )
{
    if( lua_isnumber( L, -1 ) ) {
        int i = (int)lua_tonumber( L, -1 );
        //use number
    }
}
lua_pop( L, 1 );
Run Code Online (Sandbox Code Playgroud)

然后我尝试从参考手册:

lua_getglobal( L, "level" );
int t = 1;
lua_pushnil( L );
while( lua_next( L, t ) ) {
    printf( "%s - %s", 
        lua_typename( …
Run Code Online (Sandbox Code Playgroud)

c++ lua lua-table

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

lua:遍历表中的所有对

我有一个稀疏的lua表,我需要迭代它.问题是,似乎lua从1开始迭代,并在找到nil值后立即终止.这是和例子:

> tab={}
> tab[2]='b'
> tab[5]='e'
> for i,v in ipairs(tab) do print(i,v) end
>               --nothing is output here
> tab[1]='a'
> for i,v in ipairs(tab) do print(i,v) end
1   a
2   b
>               --terminates after 2 (first nil value is tab[3])
Run Code Online (Sandbox Code Playgroud)

有没有办法得到所需的输出:

1   a
2   b
5   e
Run Code Online (Sandbox Code Playgroud)

lua loops lua-table

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

删除了Lua表库?

我正在尝试学习Lua上的绳索,我正在阅读在线教程.我试图解决的一个问题是检查一个表local foo = {},看看它有多少元素.教程给出了使用的建议local length = table.getn(foo).当我使用Lua52尝试这个时,我收到一个错误说明attempt to call field 'getn' (a nil value).我进一步环顾四周,注意到任何给出的函数都会table产生相同类型的错误.是table图书馆从Lua删除?它是第三方图书馆,还是给出了什么?

lua lua-table

16
推荐指数
2
解决办法
5628
查看次数

如何将表"解包"到函数参数中

我试图在Lua中调用一个接受多个'number'参数的函数

function addShape(x1, y1, x2, y2 ... xn, yn)
Run Code Online (Sandbox Code Playgroud)

我有一个值表,我想作为参数传递

values = {1, 1, 2, 2, 3, 3}
Run Code Online (Sandbox Code Playgroud)

是否有可能在函数调用中动态"解包"(我不确定这是否是正确的术语)这些值?就像是..

object:addShape(table.unpack(values))
Run Code Online (Sandbox Code Playgroud)

相当于调用:

object:addShape(1, 1, 2, 2, 3, 3)
Run Code Online (Sandbox Code Playgroud)

抱歉,如果这是一个完全明显的Lua问题,但我不能为我的生活找到关于这个主题的任何内容.


UPDATE

unpack(values)也不起作用(深入研究方法addShape(...)并检查传递的值的类型显示unpack导致单个string.

lua lua-table

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

标签 统计

lua ×10

lua-table ×10

sorting ×2

asort ×1

c++ ×1

concatenation ×1

initialization ×1

loops ×1