在Lua中获取列表或表的一部分

18
我知道在Python中这很容易实现:someList[1:2],但是在Lua中该怎么做呢?那段代码会报语法错误。
3个回答

23
{unpack(someList, from_index, to_index)}

但是表格索引将从1开始,而不是从from_index开始。

15

内置在Lua中的unpack函数可以为您完成此任务:

返回给定表中的元素。

您也可以使用

x, y = someList[1], someList[2]

对于相同的结果,这种方法是可行的。但是这种方法无法应用于长度不同的

用法

table.unpack (list [, i [, j]])

从给定的表中返回元素。此函数等同于
return list[i], list[i+1], ···, list[j]

默认情况下,i1j#list
一个 codepad 链接以展示相同的工作。

请注意,用法部分中的方括号表示 i 和 j 是可选的!我花了一些时间才理解。 - Sisyphus

9

Python 等效的确切内容

someList = [ 'a', 'b', 'c', 'd' ]
subList = someList[1:2]
print( subList )    

在Lua中

someList = { 'a', 'b', 'c' , 'd' }
subList = { unpack( someList, 2, 2 ) }
print( unpack(subList) )

重要的是,unpack 返回"多个结果",它不是一个表格,因此要在Lua中获取列表(又名表格),需要使用 {} "tablify" 结果。

然而,在Lua中无法打印表格,但可以打印多个结果,因此为了获得有意义的输出,需要再次解包。

因此,与模仿使用列表的Python不同,Lua 真正地具有多个返回值。


在 Lua 的后续版本中,Nb 变成了 table.unpack

打印未解包的列表对我没有用 - 它只打印了第一个元素 - 但是 table.concat(subList, ", ")) 不错。 - lucidbrot
@lucidbrot 是哪个 Lua 版本? - Sled
5.3.5 在Windows上。(虽然我可能犯了一些错误,所以它没有起作用)编辑:是的,如果我在一个单独的文件中使用你的例子,那就可以了。只是把我的评论当作帮助其他人发现他们犯的错误 :) - lucidbrot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接