`
gaotong1991
  • 浏览: 93004 次
  • 来自: 北京
社区版块
存档分类
最新评论

Lua银弹之table

阅读更多
来做一个Brain Storm,细数一下你曾经使用过的数据结构: map, hash_map, array, queue, stack, heap...或许还有很多其它的数据结构,相信在开始接触每个数据结构的时候都花了很多的时间去了解它们的特性,因为他们每一种都是足够的复杂。那么作为一个简单至极的语言,Lua是怎么实现这些的呢?答案是Lua中根本没有这些数据结构,汗了吧!更汗的是,Lua其实只一个真正意义上我们所谓的数据结构table,所以在这个简单的语言中我们可以使用的只能table这一种数据结构,下面我们来看一下这个神奇的table吧。

1, 我们可以使用table来实现一个数组 array = {1, 2, 3},这是一个大小为3的数组(*注其索引是从1开始的),可以使用#array来获取数组的大小即 #array = 3,也可以使用table.size(array)来获取数组的大小。这里array是一个变长的数组执行table.insert(array, 4),array就变成了{1,2,3,4}。table.remove(array, pos)来删除数组中指定位置的元素,其后面的元素都会相应前移。

2, 用table实现字典 dict = {[2] = 2, ["abc"] = "abc", [true] = false}, 由此可见lua字典的key值可以为任何的数据类型(nil除外),print(dict["abc"])会输出“abc"。那么现在有一个问题了,即然table即可以表示数组,又可以表示字典,如何区分呢?可以这样分类,如果像1那样不包含key值,它即是数组,也是字典,它也可以写成array = {[1] = 1, [2] = 2, [3] = 3},所以如果一个字典它的key值是从1开始按1递增的,效果同上。所以{1,2,3,[4] = 4} 等同于{1,2,3,4}和 {[1] = 1, [2] = 2, [3] = 3, [4] = 4}。而array = {1,2,3, [5] = 5}则会出现#array = 3,即前三项是一个数组,如果出现key不是整整形,效果同上。

3,table实现queue, stack, heap等原理同在c++中使用数组实现他们类似。

4,table也可以类似于C++的struct的使用如 tbl  = { year = 2014, date = 7 , month = 4}, 而使用的时候可以直接tbl.year, tbl, date, tbl.month来使用。

2
0
分享到:
评论

相关推荐

    json转lua-table工具

    JSON(JavaScript Object Notation)和Lua Table 是两种广泛使用的数据序列化格式,分别在Web开发和游戏编程领域中占据重要地位。JSON因其简洁明了的结构而被广泛用于数据交换,而Lua Table则是Lua编程语言中的核心...

    Lua跟C之间交互Table

    详细描述Lua和C之间相互传递Table类型数据 /* ====================================================== */ // 遍历Lua传入的Table类型参数, 获取它的Key/Value, 其关键操作是 lua_next() // lua_next() 返回1表示...

    Lua中的table函数库.pdf Lua初学 table 经典有用

    Lua语言中的table是一种灵活的数据结构,它在Lua编程中占据着非常重要的位置,类似于数组、字典和集合的混合体。Lua table函数库提供了一组功能丰富的...table的灵活性和多功能性使得其成为Lua中最核心的数据结构之一。

    unity lua表table 优化,支持多线程处理

    由于其动态特性和弱类型,表是Lua的核心特性之一。优化表的关键在于减少内存占用和提高访问效率。 2. 内存优化:当多个脚本或对象中存在大量重复的表时,内存消耗会显著增加。通过提取公共部分,创建共享的“原型”...

    Lua的table元表自我学习笔记

    Lua的table元表自我学习笔记分享。--lua元表总结 --1、__index的运用 (调用table的一个不存在的索引时,会使用到元表的__index元方法,搜索元表是否也有改索引,__index可以是一个函数也可是一个table。)

    Lua的table库函数insert、remove、concat、sort详细介绍1

    Lua 的 table 库函数是 Lua 语言中最常用的数据结构之一,提供了多种函数来操作和处理表数据。下面将详细介绍四个常用的 table 库函数:insert、remove、concat 和 sort。 一、insert 函数 insert 函数的作用是将...

    Json转换成lua table

    步骤: 1. 通过 Navicat Mysql 或 Navicat Premium 先到处表成json文件。...2. 把导出的文件复制到 Json2Lua 文件夹下的 json文件夹下。 3. 双击运行 run.bat 4. 没有报错的话,会把转换后的文件输出到 lua文件夹下。

    lua程序实现对两个文件的表的比较

    在IT行业中,Lua是一种轻量级的脚本语言,常用于游戏开发、嵌入式系统以及服务器配置等场景。本文将深入探讨如何使用Lua来实现对两个文件中表的比较,找出它们之间的差异。 首先,我们需要理解Lua中的表。表是Lua的...

    Lua中table里内嵌table的例子

    在Lua编程语言中,`table` 是其核心的数据结构,它可以用来存储任意类型的数据,包括其他 `table`。内嵌 `table` 是一种强大的特性,它允许在一个 `table` 内部定义另一个 `table`,形成层级结构,这对于构建复杂的...

    使用 xls_to_lua.lua 把 xls 解析成 lua table

    解析文件使用 lua 编写,把 *.xls 解析成 lua table,双击 run.bat 文件值行解析,支持多子表解析,键值对 k/v 解析。 例子说明:https://blog.csdn.net/qq_26117171/article/details/127131168 支持解析的数据类型...

    Lua中访问table里函数的方法示例

    在Lua中,table(表)是一种复合数据类型,它可以用来实现数组、记录、集合、队列等数据结构。Lua中的函数是头等公民,这意味着函数可以存储在变量中、作为参数传递给其他函数,或者作为其他函数的返回值。在处理Lua...

    Lua中获取table长度的方法

    在Lua的早期版本中,获取table长度的建议做法是使用`table.getn(t)`函数,但随着Lua语言版本的更新,官方文档已经明确指出,应优先使用#操作符来获取table的长度,因为`table.getn(t)`函数已经不再被推荐使用。...

    table里面获取所有元素

    在IT行业中,尤其是在Web开发领域,表格(Table)是一种常用的数据展示方式,它允许我们以结构化的方式组织信息。在HTML中,`<table>`元素是创建表格的基础,而获取表格中的所有元素则是进行数据操作、事件绑定或者...

    Lua Table转C# Dictionary的方法示例

    首先,类中有一个名为luatable的成员变量,用于存储Lua Table格式的字符串。类中的Parse方法用于解析这个字符串,并构建C# Dictionary。 解析过程中,博主首先检查了字符串是否符合Lua Table的格式,即首尾是否为大...

    举例讲解Lua中的Table数据结构

    在 Lua 中,Table 是一种极其重要的数据结构,它是 Lua 中唯一的复合数据类型。Table 不仅仅是一个简单的数组,它还是一个关联数组,可以存储任意类型的键值对,包括字符串、数字、甚至是其他 Table。这使得 Lua 的 ...

    Lua中获取table长度问题探讨

    在Lua编程语言中,table是一种非常灵活的数据结构,既可以用作数组(list)也可以用作记录(record),还可以混用这两种风格。正因为这种灵活性,使得在获取table长度的问题上也变得相对复杂。table的长度获取不是...

    excel_to_lua:配合ulua使用的导表工具,把excel表直接导成lua可用的table

    "excel_to_lua"工具的核心是Python编程语言,Python以其强大的库支持和简洁的语法,成为了数据处理领域的首选工具之一。在本案例中,Python的pandas库用于读取Excel文件,xlrd和xlwt库用于操作Excel文件,而lua-...

    Lua的table库函数insert、remove、concat、sort详细介绍

    Lua中的table库函数是编程中常用的操作集合,主要用于处理table数据结构。在这篇文章中,我们将深入探讨四个关键的函数:`insert`、`remove`、`concat`和`sort`,并提供相应的使用实例。 1. **table.insert(table, ...

    excel 转lua table

    使用时修改python内的文件夹路径 需要安装xlrd 可以实现多sheet多xls转化 Version:1.0

    Lua中释放table占用内存的方法

    在Lua编程语言中,管理内存是一项重要的任务,特别是当你处理大量数据或大型数据结构时,如table。table在Lua中是动态类型的数据结构,能够存储任意类型的键值对,包括数字索引和字符串索引。然而,当你不再需要这些...

Global site tag (gtag.js) - Google Analytics