在Lua中,表(table)是十分重要的一种数据结构,实际上Lua对于复杂数据类型也仅提供了表给我们,我们通过表可以实现我们需要的大部分重要的数据结构,比如数组。

table类型实现了关联数组,关联数组是一种具有特殊索引方式的数组;不仅可以通过整数来索引它,还可以使用字符串或其它类型的值(除了nil)来索引它。此外,table没有固定的大小,可以动态得添加任意数量的元素到一个table中。

在Lua中,table既不是“值”,也不是“变量”,而是对象。可以将table想象成一种动态分配的对象,程序中仅仅有一个队它们的引用(指针)。table的创建是通过“构造表达式”完成的,最简单的构造表达式就是{}。

定义表和设置属性

有3种定义属性的方式和2种获取属性的方式:

 obj = {a=100, d="hello"}--创建时设置属性
obj.b = "abc"--使用 . 号创建
obj["c"] = true--使用索引创建 print(obj.a)--使用 . 号创建
print(obj["b"])--使用索引创建

遍历表

我们可以使用for循环对表进行遍历,如下:

 days = {"Suanday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}

 --i 表示索引, v 表示值
for i,v in ipairs(days) do
print(i, v)
end

内置方法

Lua给我们提供了一些操作表的方法,比如table.concat等,所有的方法可以查看lua的帮助:http://www.lua.org/manual/5.2/contents.html#index

数组

Lua并没有提供专门的数组对象来对数组进行操作,但是我们可以使用table来实现数组。

定义数组

不同于table表,初始化数组时不需要填写key,而数组始终使用数字作为其key:

 arr = {, "abc", , true}--定义数组
print(arr[])--注意索引从 1 开始

我们要特别注意的就是Lua中数组的索引是从1开始的。

使用内置方法处理数组

Lua为我们提供了一些标准的方法来处理数组,我们来具体看看。

table.insert

强指定的值插入到指定的位置,如下:

 arr = {}

 for i = ,  do
table.insert(arr,,i)
end for key, var in ipairs(arr) do
print(key, var)
end

我们看下输出:


我们每次都是把数据插入到第一个位置,所以以前的元素都会后移,故打印出来的值的结果就是从5到1。

table.maxn

获取数组最大的索引值,由于lua索引是从1开始的,所以最大的索引值就是数组元素的总数。

还有其他的操作方法大家可以参考帮助,最后需要特别注意的一点是,小心不要操作到不存在的索引,会导致运行卡死。

获取数组长度

在Lua中可以使用“#”号和table.maxn两种方法来获取数组的长度,我们看看他们之间的区别:

 arr = {,,,,,}
print(#arr)--
print(table.maxn(arr))-- arr[] =
print(#arr)--
print(table.maxn(arr))--
  1. 都仅统计数字key的长度;
  2. #号是表示从1递增到空项的长度;
  3. table.maxn是表示所有数字key中最大的那个key的索引值;

数字索引和字符串索引

在Lua中,数字key和字符串key是不会混合到一起的,我们可以具体来看看:

 arr = {}
arr[] =
arr[""] = "abc"
print(#arr, table.maxn(arr), arr[], arr[""])--1 1 1 abc

Lua学习笔记(四):表和数组的更多相关文章

  1. [转]LUA 学习笔记

    Lua 学习笔记 入门级 一.环境配置 方式一: 1.资源下载http://www.lua.org/download.html 2.用src中的源码创建了一个工程,注释调luac.c中main函数,生 ...

  2. vue学习笔记(六)表单输入绑定

    前言 在上一章vue学习笔记(四)事件处理器这一篇博客的内容中,我们已经了解vue是如何绑定事件的,而本篇博客主要讲解的是vue中表单输入的绑定,通常我们自己提交信息的时候都是通过表单将信息到服务器的 ...

  3. Lua 学习笔记(一)

    Lua学习笔记 1.lua的优势 a.可扩张性     b.简单     c.高效率     d.和平台无关 2.注释 a.单行注释 --        b.多行注释 --[[  --]] 3.类型和 ...

  4. ES6学习笔记<四> default、rest、Multi-line Strings

    default 参数默认值 在实际开发 有时需要给一些参数默认值. 在ES6之前一般都这么处理参数默认值 function add(val_1,val_2){ val_1 = val_1 || 10; ...

  5. python3.4学习笔记(四) 3.x和2.x的区别,持续更新

    python3.4学习笔记(四) 3.x和2.x的区别 在2.x中:print html,3.x中必须改成:print(html) import urllib2ImportError: No modu ...

  6. Lua学习笔记:面向对象

    Lua学习笔记:面向对象 https://blog.csdn.net/liutianshx2012/article/details/41921077 Lua 中只存在表(Table)这么唯一一种数据结 ...

  7. Java学习笔记之---方法和数组

    Java学习笔记之---方法与数组 (一)方法 (1)什么是方法? 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建,在其他地方被引用 (2)方法的优点 使程序变得更简短而 ...

  8. MySql学习笔记四

    MySql学习笔记四 5.3.数据类型 数值型 整型 小数 定点数 浮点数 字符型 较短的文本:char, varchar 较长的文本:text, blob(较长的二进制数据) 日期型 原则:所选择类 ...

  9. C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻

    前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...

  10. matlab学习笔记(一)单元数组

    matlab学习笔记(一)单元数组 1.floor(x) :取最小的整数 floor(3.18)=3,floor(3.98)=3 ceil(x)  :取最大的整数 ceil(3.18)=4,ceil( ...

随机推荐

  1. 解决编译报错:Unable to copy file, because it is being used by another process.

    Error    63    Unable to copy file "D:\DEV\XXX Website\trunk\4 Source Code\Common\WebControls\b ...

  2. NoSQL 数据库系统对比

    虽然SQL数据库是非常有用的工具,但经历了15年的一支独秀之后垄断即将被打破.这只是时间问题:被迫使用关系数据库,但最终发现不能适应需求的情况不胜枚举. 但是NoSQL数据库之间的不同,远超过两 SQ ...

  3. asp.net实现GZip压缩和GZip解压

    最近在开发一个网站doc.115sou.com,使用到了GZip压缩技术,经过多次搜索找到asp.net中用GZip对数据压缩和解压缩非常方便,当我第一次拿到这个类的时候却感觉很迷茫,无从下手.主要是 ...

  4. ti processor sdk linux am335x evm /bin/setup-host-check.sh hacking

    #!/bin/sh # # ti processor sdk linux am335x evm /bin/setup-host-check.sh hacking # 说明: # 本文主要对TI的sdk ...

  5. delphi 对话框初始地址InitialDir

    我的电脑:SaveDialog1.InitialDir := '::{20D04FE0-3AEA-1069-A2D8-08002B30309D}';// My Computer {20D04FE0-3 ...

  6. hdu 3341(ac自动机+状态压缩)

    题意:容易理解... 思路:首先一开始容易想到要用到dp,开设一个dp[41][41][41][41][501]的数组来解决,但是明显内存已经超出范围了,于是就想如何减少内存呢?只要知道A.T.C.G ...

  7. replace() MySQL批量替换指定字段字符串

    mysql replace实例说明: UPDATE tb1 SET f1=REPLACE(f1, 'abc', 'def'); REPLACE(str,from_str,to_str) 在字符串 st ...

  8. 【软件多国语言】一个demo

    之前上学的时候做过一个东西,需要中英文软件界面,并且需要随时可以切换,当时是师妹来做的,用的最直接也是最笨的办法, what? if(中文) { button1.Text = "花姑娘&qu ...

  9. ubuntu安装nginx+php

    1.安装nginx aptitude search nginx sudo apt-get install nginx 2.安装php sudo apt-get install php5 sudo ap ...

  10. BFC--绝对值得你思考

    CSS BFC(Block Formatting Context)      BFC是W3C CSS 2.1规范中的一个概念,他决定了元素如何对其内容进行定位,以及与其他元素的关系和相互作用.     ...