原文:http://zuolun.me/blog/2014/10/03/lua-table/
lua并不像其他语言一样提供了Array,List,Set,Queue等各种数据结构来完成各种不同数据操作,相比,lua只提供了一种数据结构 – Table,可谓以不变应万变了。
lua的table可以以整数和字符串为下标,但是我们可以在一个table中存储各种数据,可以存储数据,字符串,函数,甚至表等各种结构,
整数索引
lua以整数为下标时,我们就可以像数组一样直接使用,其实lua底层,table是由两部分组成的,一部分是数组,用来存储像整数下标的这些值,一部分用哈希表来实现,用来存储像字符串这样索引的值。lua对table的大小没有限制,也就是说我们可以在使用过程中,在table中添加元素。
1 2 3 |
|
可以看到访问table1[0]返回nil,而table1[1]访问表中第一个值。当我们访问表中不存在的值时会返回nil值,默认table下标是从1开始的,而不是我们熟悉的像其他语言中从0开始,table可以使用任意整数为下标。
1 2 |
|
上边这两种形式是等价的。
1 2 3 4 5 6 7 |
|
可以使用#操作来计算下标从1开始并连续的table的大小,从上边例子可以看到,如果数组从零开始或者中间有下标不连续,计算的talbe的大小就只是从1到连续结束的元素的个数,如果table元素不是以1下标开始的计算结果为0。
字符串索引
1 2 3 4 5 6 |
|
上边这三种形式创建的表都是一样的。但是有字符串索引的时候,就不能直接采用#操作求table的大小了。如果需要知道table的大小,肯能就需要一个计数器了。
遍历
1 2 3 4 |
|
像上边这样,当table使用整数索引的时候,我们可以像在其他语言中使用数组一样访问表中的元素。但是当下标不为整数,或者整数下标不连续时,我们就无法求得table的大小,上边这种遍历table的方法就行不通了,为了能够方便的遍历table,lua为我们提供了两个有用的方法pairs和ipairs。
1 2 3 4 |
|
使用pairs以key-valued的形式遍历了table2中所有的元素,就像我们在c++中使用迭代器一样。
1 2 3 4 |
|
但是当使用ipairs遍历时,只是访问了前两个元素,这是因为ipairs只遍历下标从1开始,连续增长的表。像上边table1这样的表,ipairs可以完全遍历,所以在使用的时候需要注意,当下标不连续,或者索引不是整数时,ipairs就停止遍历接下来的元素。
库方法
为了方便操作表,lua提供了几个对表操作的库方法
table.concat(list [, sep [, i [, j]]]) - 链接表中的元素,返回字符串。
1 2 |
|
有四个参数,后三个可选,第一个参数是表, 第二个参数分隔符,像上边的冒号,默认为空字符, 第三个参数,开始字符位置,默认下标为1, 第四个参数,结束下标,默认为表的大小。所以默认是链接整个表,我们也可以指定链接表中指定下标区域内的元素。
table.insert(list, [pos,] value) - 插入元素
1 2 3 |
|
有三个参数,第一个表,第二个参数可选,插入的位置,默认是#table+1,第三个参数要插入的值,所以默认是讲元素插入到表最后的。像上边这样只有两个参数的,其实是省略掉了中间第二个元素,插值在最后。
table.pack(···) - 将所有参数打包到一个表中
1 2 3 4 5 |
|
接收任意多个参数,将所有参数打包到一个下标从1开始的表中,像上边,打包完后tab1 = {"hello", "world", "lua", 1, 4}
但是不一定所有参数都是顺序打包的。
table.unpack (list [, i [, j]]) - 跟table.pack相反
1 2 3 4 5 6 7 |
|
返回多个参数,也可以指定需要的坐标范围,比如只返回第二到第四个元素,那么就返回3个元素。
table.remove(list [, pos]) - 移除表中元素
1 2 3 4 |
|
移除表中指定位置元素,有两个参数,第一个表,第二个移除元素的下标,可选,默认值是表中最后一个元素位置。第二个参数要在表的大小范围内,移除后指定位置元素后,下标后边元素向前移动。
table.sort (list [, comp]) - 排序
1 2 3 |
|
对表中元素进行排序,默认从小到大,在第二个参数中也可以实现自己的排序条件
1 2 3 4 5 |
|
talbe除了像数组这种操作外,还可以用来实现其他数据结构,但是在lua中像List,Set这种数据结构,不一定比table方便,除了数据结构的操作外,lua还可以用表实现类的封装,继承等面向对象特性,而这一切都是基于元表的,感觉Lua的table无所不能啊。
List,Set实现看见《Programming in lua》
相关推荐
首先,我们需要了解Lua中的数组和table是两种不同的数据结构。数组在Lua中其实就是一个特殊的table,它的索引是连续的数字。而table则是一种关联数组,可以使用字符串或者其他类型的值作为索引。在Lua中,通常通过...
在Lua中,`table`是其核心数据结构之一,它是一种动态数组,支持关联数组,即可以用任意类型的值作为键(key)。在处理table时,我们经常需要遍历其元素,这里将详细介绍四种常见的Lua table遍历方法。 1. `for key...
数组在Lua中被实现为一种称为“表”(table)的数据结构,它是一种动态大小的关联数组,允许我们存储任意类型的值,包括数字、字符串、函数甚至是其他表。这里我们将深入探讨Lua中的数组特性,包括一维数组、多维...
在Lua编程语言中,表(table)是一种非常强大的数据结构,它可以被用作数组、哈希表、集合等多种用途。本文将详细介绍如何在Lua中检查一个表(通常当作数组使用时)是否包含特定的值。这个功能在很多实际应用中都...
在Lua中,数组是基于索引的表格(table)类型,因此我们可以通过创建一个包含多个表格的表格来模拟二维数组。 以下是一个简单的二维数组创建示例: ```lua local二维数组 = {} for i = 1, 3 do 二维数组[i] = {} ...
首先,类中有一个名为luatable的成员变量,用于存储Lua Table格式的字符串。类中的Parse方法用于解析这个字符串,并构建C# Dictionary。 解析过程中,博主首先检查了字符串是否符合Lua Table的格式,即首尾是否为大...
在Lua中,table可以被用作数组、字典等数据结构,它们是Lua语言的核心部分。而C++是一种性能强大且灵活的编程语言,有时需要与Lua脚本交互。为了在C++程序中操作Lua的table,通常需要借助Lua的C API。 为了遍历Lua ...
在Lua中,table是其核心数据结构,用于存储各种类型的数据。然而,当需要从table中安全地移除元素时,需要特别注意,以避免因不当操作引发的错误,例如内存泄漏。以下介绍三种安全移除元素的方法: 1. **从后往前...
### Lua中的userdata详解 在深入探讨Lua中userdata的使用之前,我们需要先理解userdata的基本概念及其在Lua编程中的重要性。 #### userdata简介 在Lua中,`userdata`是一种用于存储指向C语言数据结构的指针的类型...
Lua是一种轻量级的脚本语言,它有着简洁而强大的数据结构——table,可以被用来存储数组、字典等多种类型的数据。在编程实践中,我们经常需要判断一个table是否为空,也就是是否没有存储任何数据。在Lua语言中,判断...
表是Lua的核心数据结构,它是一个动态大小的关联数组,可以存储任意类型的值,包括数字、字符串、其他表甚至是函数。在进行两个文件的表比较时,我们通常关心的是表的键(key)和对应的值(value)是否相同。 假设...
Lua中的table库函数是编程中常用的操作集合,主要用于处理table数据结构。在这篇文章中,我们将深入探讨四个关键的函数:`insert`、`remove`、`concat`和`sort`,并提供相应的使用实例。 1. **table.insert(table, ...
Lua中的table类型是一种非常核心且灵活的数据结构,它不仅可以作为数组使用,还能实现关联数组、哈希表等复杂数据组织形式。以下是对table类型的详细解释: 1. **基础概念** - **数组与关联数组**:Lua的table既...
为了将DataFrame转换为Lua表格,我们可以遍历DataFrame的每一行和每一列,生成对应的Lua代码字符串: ```python def df_to_lua(df): lua_code = "{\n" for i, row in df.iterrows(): lua_row = " {" for j, ...
总的来说,Lua 的 Table 数据结构是一种强大而灵活的工具,可以用来实现数组、字典、集合、队列、栈等多种数据结构,甚至可以用来实现面向对象编程。理解并熟练掌握 Table 的使用是成为 Lua 程序员的关键。
在新版本的Lua中,获取table长度的推荐方法是通过遍历table,并记录遇到的最后一个非nil键的索引。这种方法可以准确计算出table的长度,但它需要手动实现,并且如果table非常大,可能会带来性能上的影响。 由于上述...
在 Lua 语言中,table 是一个非常核心且多功能的数据结构,它扮演着多种角色,包括字典、数组、环境(命名空间)等。下面我们将详细探讨 Lua 中 table 的各种特性和用途。 首先,table 作为字典使用时,其键(key)...
这段代码首先使用`pd.read_excel()`函数读取Excel文件到一个DataFrame对象,然后遍历每一行,将其转换为Lua语法的数组表示。最后,将整个Lua表格写入到名为`data.lua`的文件中。 为了便于使用和理解,这个转换过程...
在Lua中,表格(table)是其核心数据结构,它不仅作为数组使用,还兼备了哈希映射的功能,因此在Lua中被称为“超能力”表格。本文将深入探讨lua-table的特性和使用技巧。 一、Lua表格的基本概念 1. **数组与哈希的...
pairs 语法可以遍历任何类型的表,包括数组和对象,而 ipairs 语法只能遍历数组类型的表。 在 ipairs 语法中,迭代函数会返回三个值:迭代函数、表和初始索引值。这些值可以用来遍历表中的元素。 在 pairs 语法中...