鍍金池/ 教程/ Java/ 數(shù)組
數(shù)據(jù)庫訪問
循環(huán)
數(shù)組
錯誤處理
面向?qū)ο?/span>
調(diào)試
游戲開發(fā)
文件 I/O
變量
迭代器
Web 編程
模塊
函數(shù)
元表
協(xié)程
垃圾回收機制
標準庫
決策
數(shù)據(jù)類型
運行環(huán)境
操作符
字符串
基本語法
概述

數(shù)組

數(shù)組是一組有序的對象排列,既可以是一維的也可以是多維的。

在 Lua 語言中,數(shù)組是用整數(shù)索引表實現(xiàn)的。數(shù)組的大小并不固定,隨著數(shù)組元素的增加,它可以動態(tài)地增加內(nèi)存空間大小。

一維數(shù)組

一維數(shù)組可以使用一個簡單的表結(jié)構(gòu)表示??梢酝ㄟ^一個簡單循環(huán)初始化數(shù)組或者讀取數(shù)組中數(shù)據(jù)。示例代碼如下所示:

array = {"Lua", "Tutorial"}

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

執(zhí)行上面的代碼可以得到如下的輸出結(jié)果:

nil
Lua
Tutorial

從上面的例子中可以看出,當我們嘗試著訪問數(shù)組中一個不存在的索引時,會得到 nil 值。 Lua 語言與 C 語言不同,Lua 數(shù)組的索引是從 1 開始的,而 C 語言中索引是從 0 開始的。不過呢,你也可以在索引值為 0 或小于 0 的位置創(chuàng)建對象。下面的代碼演示了如何使用負索引值創(chuàng)建并初始化數(shù)組:

array = {}

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

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

執(zhí)行上面的代碼可以得到如下的輸出結(jié)果:

-4
-2
0
2
4

多維數(shù)組

多維數(shù)組有以下兩種實現(xiàn)方式:

  1. 數(shù)組的數(shù)組(譯注:數(shù)組的每一個元素是一個數(shù)組)。
  2. 修改一維數(shù)組的索引值(譯注:將多維數(shù)組映射到一維數(shù)組中)。

使用方法一創(chuàng)建 3x3 的二維數(shù)組:

-- 初始化數(shù)組
array = {}
for i=1,3 do
   array[i] = {}
      for j=1,3 do
         array[i][j] = i*j
      end
end

-- 訪問數(shù)組元素
for i=1,3 do
   for j=1,3 do
      print(array[i][j])
   end
end

執(zhí)行上面的代碼可以得到如下的輸出結(jié)果:

1
2
3
2
4
6
3
6
9

通過修改數(shù)組的的索引值實現(xiàn) 3x3 的二維數(shù)組,示例代碼如下:

-- 初始化數(shù)組
array = {}
maxRows = 3
maxColumns = 3
for row=1,maxRows do
   for col=1,maxColumns do
      array[row*maxColumns +col] = row*col
   end
end

-- 訪問數(shù)組元素
for row=1,maxRows do
   for col=1,maxColumns do
      print(array[row*maxColumns +col])
   end
end

執(zhí)行上面的代碼可以得到如下的輸出結(jié)果:

1
2
3
2
4
6
3
6
9

正如從上面例子中所看到的那樣,數(shù)組中數(shù)據(jù)是基于索引存儲的。這使得數(shù)組可以以稀疏的方式存儲,這也是 Lua 矩陣的存儲方式。正是因為 Lua 中不會存儲 nil 值,所以 Lua 不需要使用任何特殊的技術(shù)就可以節(jié)約大量的空間,這一點在其它語言中是做不到的。

下一篇:Web 編程