lua 4 使用table实现其他数据结构,并介绍遍历方法

本文会以vector / map / set 这三种数据类型的角度来梳理 table 支持的不同遍历方式。

table as array / vector

一般,C/C++中的 array / vector (下文简称 vector) 是没有 key。但是在 lua 中使用了 table 这种通用结构,就引入了 key 的问题。

在这里,把想用做 vector 的 table,做一个非常重要的约定:1 初始,key 连续。由于 table 的自由度很高,这个需要开发者自己约束。

---- 新建

t = {"A", "BB", "CCC"} -- 默认的key就是1初始且连续

-- 或者
t = {} -- 建立一个空的
t[1] = 1
t[2] = 2
t[3] = 3

-- 或者
t = {
    [1] = 1,
    [2] = 2,
    [3] = 3,  -- 这里逗号可有可无
}

  

---- 赋值

---- 遍历

table as map / linked list

table as set

table as queues (队列,先进先出,不做介绍,请参考原文)

请参考:https://www.lua.org/pil/11.4.html

参考

http://blog.51cto.com/rangercyh/1032925

https://www.lua.org/pil/11.html

原文地址:https://www.cnblogs.com/alexYuin/p/9942842.html

时间: 2024-08-06 13:20:11

lua 4 使用table实现其他数据结构,并介绍遍历方法的相关文章

Lua 学习笔记(十)数据结构

在Lua中的table不是一种简单的数据结构,它可以作为其他数据结构的基础.其他语言提供的数据结构,如数组.记录.线性表.队列.集合等,在Lua中都可以通过table来表示.而且使用Lua实现这些数据结构的效率高. 一.数组 在Lua中数组没有固定的大小,可以根据需要增加长度.当初始化数组时,也就间接的定义了它的大小. 二.矩阵与多维数组 在Lua中,有两种方式来表示矩阵,一种是使用一个“数组的数组”,也就是数组中的元素是数组.另一种方式就是合并索引的方式,合并索引也有两种方式,加入索引分隔符和

递归打印lua中的table

递归打印lua中的table,并写到文件里: 1 local pairs_by_keys = function(inTable) 2 local temp = {} 3 for k, v in pairs(inTable) do 4 temp[#temp + 1] = k 5 end 6 7 local compare = function(a, b) 8 if type(a) == type(b) then 9 return a < b 10 elseif type(a) == "num

Torch-RNN运行过程中的坑 [1](读取Lua非空table,size为0)

0.踩坑背景 执行Torch-RNN的时候,在LanguageModel.lua中的encode_string函数中,对start_text的各个character进行id映射编码,实现功能类似"北京天安门"-->"5 10 88 32 111",方便后面的计算. 这个函数会利用一个全局的类似HashMap的table,hashmap中的key是character(char),value是id(int),涉及到一个从hashmap中按照key取值的操作,代码如

Lua中的table函数库

table.concat(table, sep,  start, end) concat是concatenate(连锁, 连接)的缩写. table.concat()函数列出参数中指定table的数组部分从start位置到end位置的所有元素, 元素间以指定的分隔符(sep)隔开.除了table外, 其他的参数都不是必须的, 分隔符的默认值是空字符, start的默认值是1, end的默认值是数组部分的总长. sep, start, end这三个参数是顺序读入的, 所以虽然它们都不是必须参数,

Lua 弱引用table

本文转载于:http://www.benmutou.com/archives/1808 这次要介绍的内容比较少,就一个——弱引用table 1.无法超越人类智慧的智能——自动内存管理的缺陷 我们都知道,Lua是具备自动内存管理的,好吧,也许有些朋友不知道. 我们只管创建对象,无须删除对象(当然,对于不要的对象你需要设置一下nil值),Lua会自动删除那些被认为是垃圾的对象. 问题就出现在,什么对象才是垃圾对象,有些时候,我们很清楚某个对象是垃圾,但是,Lua却无法发现. 比如这样一个例子: t

Lua表(table)的个人总结

1.表的简介和构造 table是个很强大且神奇的东西,又可以作为数组和字典,又可以当作对象,设置module.它是由数组和哈希表结合的实现的.他的key可以是除nil以外任意类型的值,key为整数时,就可以当作一个数组了. 构造: mtable={} --创建一个空表 mtable[1]="Hello” --指定值 mtable[1]=nil --删除元素 mtable=nil --移除引用 2.表的常见函数 ①table.sort(table [,compare])排序 ②table.inse

Java数据结构-二叉树及其遍历

二叉树的定义:n(n>=0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互相不相交的.分别称为根结点的左子树和右子树的二叉树组成. 二叉树的特点: 0<=度<=2: 左右子树是有顺序的,不能颠倒: 不论有几棵子树,也要区分它是左子树还是右子树. 二叉树的五种基本形态: 空二叉树: 只有一个根结点: 根结点只有左子树: 根结点只有右子树: 根结点既有左子树又有右子树. 举例3个结点的二叉树的形态有: 下面说一些特殊的二叉树. 斜树:所有的结点都只有左子树的二叉

Java---Hibernate&gt;&gt;Can&#39;t create table &#39;./xxx/#sql-b2c_1a.frm&#39; (errno: xxx)解决方法

通用方案:删除相关表,重新生成. 1.关联表之间数据引擎不一致导致: 修改相关表的引擎设定,保持一致. 2.关联表索引字段的引用类型不一样(如A表关联字段是int,B表索引是char): 修改相关表的字段类型,保持一致. 3.主键和外键的字符编码不一致: 修改各自对应表编码格式,保持一致. 4.找不到主表中引用的字段或没有建立关联索引: 要么删索引,要么加字段. Java---Hibernate>>Can't create table './xxx/#sql-b2c_1a.frm' (errn

数据结构之二叉树遍历

二叉树的 二叉树节点的描述 public class BiTNode { char data; BiTNode lc,rc; } 下面我们分别用递归和非递归实现前.中.后序遍历,以及使用了两种方法来进行层次遍历二叉树,一种方法就是使用STL中的queue,另外一种方法就是定义了一个数组队列,分别使用了front和rear两个数组的下标来表示入队与出队. 1.前序遍历 未完待续... 数据结构之二叉树遍历,布布扣,bubuko.com