# Table 数据结构

Lua中的table不是一种简单的数据结构，它可以作为其它数据结构的基础。如数组、记录、线性表、队列和集合等，在Lua中都可以通过table来表示。

### (1) 数组：

a = {}
for i = 1, 1000 do
a[i] = 0
end
print("The length of array 'a' is " .. #a)
--The length of array 'a' is 1000


squares = {1, 4, 9, 16, 25}


### (2) 二维数组：

mt = {}
for i = 1, N do
mt[i] = {}
for j = 1, M do
mt[i][j] = i * j
end
end


mt = {}
for i = 1, N do
for j = 1, M do
mt[(i - 1) * M + j] = i * j
end
end


### (3) 链表：

list = nil
for i = 1, 10 do
list = { next = list, value = i}
end

local l = list
while l do
print(l.value)
l = l.next
end


### (4) 队列与双向队列：

List = {}

function List.new()
return {first = 0, last = -1}
end

function List.pushFront(list, value)
local first = list.first - 1
list.first = first
list[first] = value
end

function List.pushBack(list, value)
local last = list.last + 1
list.last = last
list[last] = value
end

function List.popFront(list)
local first = list.first
if first > list.last then
error("List is empty")
end
local value = list[first]
list[first] = nil
list.first = first + 1
return value
end

function List.popBack(list)
local last = list.last
if list.first > last then
error("List is empty")
end
local value = list[last]
list[last] = nil
list.last = last - 1
return value
end


### (5) 集合和包(Bag)：

reserved = { ["while"] = true, ["end"] = true, ["function"] = true, }
if not reserved["while"] then
--do something
end


function insert(bag, element)
bag[element] = (bag[element] or 0) + 1
end

function remove(bag, element)
local count = bag[element]
bag[element] = (count and count > 1) and count - 1 or nil
end


#### (6) StringBuilder：

local buff = ""
for line in io.lines() do
buff = buff .. line .. "\n"
end


local t = {}
for line in io.lines() do
t[#t + 1] = line .. "\n"
end
local s = table.concat(t)

--concat方法可以接受两个参数，因此上面的方式还可以改为：
local t = {}
for line in io.lines() do
t[#t + 1] = line
end
local s = table.concat(t,"\n")


## 导航

• #### 米斯特白帽培训讲义

wizardforcel linux 24页 2018年5月3日
99

• #### HTTP/2 标准(RFC 7540)中文版

abbshr code 1页 2021年10月24日
374

• #### 成为专业程序员路上用到的各种优秀资料、神器及框架

tzivanmoe code 26页 2018年7月1日
0

• #### 每日 30 秒 , 一段代码 ,一个场景

pushmetop code 46页 2019年5月26日
265

• #### Rust 程序设计语言 中文版

hltj rust 71页 2018年6月5日
1

• #### Elasticsearch权威指南

Elastic 中文社区 elasticsearch 65页 2018年5月26日
2182