详解Lua中的数组概念知识

数组是有序的对象的装置,它可以是包含含有多个行和列的行或多维阵列的集合的单个二维数组。

在Lua中,数组是使用索引表与整数实现的。数组的大小是不固定的,它可以增长基于我们需要受存储器限制。
一维数组

一维数组可以用一个简单的表结构来表示,可以初始化,使用一个简单的for循环读取。如下例子所示。

代码如下:

array = {"Lua", "Tutorial"}

for i= 0, 2 do
   print(array[i])
end

当我们运行上面的代码之后,将得到下面的输出。

代码如下:

nil
Lua
Tutorial

正如在上面的代码中看到,当我们试图访问索引中是不存在的数组中的元素,则返回nil。在Lua索引通常开始于索引1,但有可能在索引0和小于0,以及创建对象。显示使用负索引数组下面我们初始化使用for循环数组。

代码如下:

array = {}

for i= -2, 2 do
   array[i] = i *2
end

for i = -2,2 do
   print(array[i])
end

当我们运行上面的代码之后,将得到下面的输出。

代码如下:

-4
-2
0
2
4

多维数组

多维数组可以用两种方式来实现。

  1. 数组的数组
  2. 一维数组通过控制索引

对于3,3多维阵列如下所示使用数组的数组的例子。

代码如下:

-- Initializing the array
array = {}
for i=1,3 do
   array[i] = {}
      for j=1,3 do
         array[i][j] = i*j
      end
end

-- Accessing the array
for i=1,3 do
   for j=1,3 do
      print(array[i][j])
   end
end

当我们运行上面的代码之后,将得到下面的输出。

代码如下:

1
2
3
2
4
6
3
6
9

对于3,3多维阵列的例子如下所示使用操作索引。

代码如下:

-- Initializing the array
array = {}
maxRows = 3
maxColumns = 3
for row=1,maxRows do
   for col=1,maxColumns do
      array[row*maxColumns +col] = row*col
   end
end

-- Accessing the array
for row=1,maxRows do
   for col=1,maxColumns do
      print(array[row*maxColumns +col])
   end
end

当我们运行上面的代码之后,将得到下面的输出。

代码如下:

1
2
3
2
4
6
3
6
9

正如在上面的例子中看到的,数据是基于索引储存的。也能够将元素以稀疏的方式,它是一个矩阵的工作方式lua的实现。因为它不保存在Lua零值,就可以节省大量的内存,在Lua中任何特殊的技术相比其他编程语言中使用特殊技术。

(0)

相关推荐

  • Lua中遍历数组和table的4种方法

    方法一,可以用for来遍历: 复制代码 代码如下: do      table_week = {      "w",      "e",      "r",      "t",      "y",      "u",      "i",      }        for i = 1, #table_week do          print(table_week[

  • Lua检测数组(tabble)中是否包含某个值

    一.检测数组中是否包含某个值 -- 遍历数组 function IsInTable(value, tbl) for k,v in ipairs(tbl) do if v == value then return true; end end return false; end 二.lua 判断一个字符是否存在某个数组 判断字符b,是否存在于数组list中 function in_array(b,list) if not list then return false end if list then

  • Lua教程(五):C/C++操作Lua数组和字符串示例

    本文将介绍如何在C/C++里面操作Lua的数组和字符串类型,同时还会介绍如何在C/C++函数里面存储Lua状态(registry和upvalue),而registry在使用C/C++自定义类型时非常有用,可以方便地为userdata指定metatable. C/C++操作Lua数组 Lua数组Overview 在Lua里面,数组只不过是key为整数的table而已.比如一个table为array = {12,"Hello", "World"},它是一个数组,可以用下

  • 详解Lua中的数组概念知识

    数组是有序的对象的装置,它可以是包含含有多个行和列的行或多维阵列的集合的单个二维数组. 在Lua中,数组是使用索引表与整数实现的.数组的大小是不固定的,它可以增长基于我们需要受存储器限制. 一维数组 一维数组可以用一个简单的表结构来表示,可以初始化,使用一个简单的for循环读取.如下例子所示. 复制代码 代码如下: array = {"Lua", "Tutorial"} for i= 0, 2 do    print(array[i]) end 当我们运行上面的代码

  • 详解Lua中的元表概念

    元表是一个表,有助于改变它连接到一个密钥集和相关的元方法的帮助下表的行为.这些元方法是强大的lua功能,如: 更改/添加功能,以运算符表 查看metatables当钥匙不在使用__index元表中的表可用. 有迹象表明,在处理metatables其中包括使用了两种重要的方法, setmetatable(table,metatable): 这个方法是用来设置元表的一个表. getmetatable(table): 此方法用于获取表的元表. 让我们先来看看如何设置一个表作为另一个元表.它如下所示.

  • 详解Lua中的表的概念及其相关操作方法

    表格是唯一的数据结构中Lua可以帮助我们创造出不同的类型,如数组和字典. Lua使用关联数组和可不仅数字,但也有不同的零字符串索引.表格都没有固定的大小,并根据需要可以增长. Lua采用的所有陈述,包括包装的代表性表.当我们访问一个方法的字符串.格式,这意味着,我们正在访问的格式化功能的字符串封装. 表示和用法 表称为对象和它们既不值,也没有变. Lua使用构造函数表达式{}创建一个空表.它是要知道,有保存表的参考和表本身的变量之间没有固定的关系. 复制代码 代码如下: --sample tab

  • 详解Java中的数组与字符串相关知识

    Java数组的定义和使用 如果希望保存一组有相同类型的数据,可以使用数组. 数组的定义和内存分配 Java 中定义数组的语法有两种: type arrayName[]; type[] arrayName; type 为Java中的任意数据类型,包括基本类型和组合类型,arrayName为数组名,必须是一个合法的标识符,[ ] 指明该变量是一个数组类型变量.例如: int demoArray[]; int[] demoArray; 这两种形式没有区别,使用效果完全一样,读者可根据自己的编程习惯选择

  • 详解C#中一维数组的插入

    一维数组的插入: 实现效果:在1 2 3 后面插入4 using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Array { class Program { static void Main(string[] args) { int[] array =

  • 详解Numpy中的数组拼接、合并操作(concatenate, append, stack, hstack, vstack, r_, c_等)

    Numpy中提供了concatenate,append, stack类(包括hsatck.vstack.dstack.row_stack.column_stack),r_和c_等类和函数用于数组拼接的操作. 各种函数的特点和区别如下标: concatenate 提供了axis参数,用于指定拼接方向 append 默认先ravel再拼接成一维数组,也可指定axis stack 提供了axis参数,用于生成新的维度 hstack 水平拼接,沿着行的方向,对列进行拼接 vstack 垂直拼接,沿着列的

  • 详解Lua中的数据类型

    Lua是动态类型语言,所以变量没有类型,仅值有类型.值可以被存储在变量中,作为参数传递,并作为结果返回. 在Lua中虽然我们没有变量的数据类型,但我们有类型的值.用于数值数据类型的列表在下面给出.  函数类型 在Lua中有一个叫做函数类型,使我们能够知道变量的类型.如下一些例子给出了下面的代码. 复制代码 代码如下: print(type("What is my type"))   --> string t=10 print(type(5.8*t))              

  • 详解Lua中的变量相关知识点

    变量不过是存储到区域项目可以操作的名称.它可以容纳不同类型的值,包括函数和表格. 变量名可以由字母,数字和下划线.它必须以字母或下划线.大写和小写字母是不同的,因为Lua是区分大小写的.有八种基本类型值在Lua中: 在Lua,尽管我们没有变量的数据类型,我们基于该变量范围的三种类型. 全局变量:所有的变量默是全局除非显式地声明为局部. 局部变量:当类型被指定为局部的一个变量,它的范围是有限的在自己的范围内使用. 表字段:这是一种特殊类型的变量,可以除了nil,包括功能不放任何东西. 在Lua变量

  • 详解JavaScript中的数组合并方法和对象合并方法

    1 数组合并 1.1 concat 方法 var a=[1,2,3],b=[4,5,6]; var c=a.concat(b); console.log(c);// 1,2,3,4,5,6 console.log(a);// 1,2,3 不改变本身 1.2 循环遍历 var arr1=['a','b']; var arr2=['c','d','e']; for(var i=0;i<arr2.length;i++){ arr1.push(arr2[i]) } console.log(arr1);/

  • 详解Ruby中的方法概念

    Ruby方法跟其他编程语言中的函数非常相似, Ruby方法用于捆绑到一个单元中的一个或多个重复的语句. 方法名称应以小写字母开始.如果一个方法的名称以大写字母开始,Ruby可能会认为这是一个常数,因此可以正确解析调用. 方法应该定义Ruby的之前调用他们,否则会引发一个异常未定义的方法调用. 语法: def method_name [( [arg [= default]]...[, * arg [, &expr ]])] expr.. end 所以,可以定义一个简单的方法如下: def meth

随机推荐