Lua数组与表

Lua表

table是 Lua中的一种数据结构, 既可以当做数组(array)使用, 又可以当做字典(类似 Java中的HashMap)来使用

在 Lua的8中数据结构中,

· 可以作为 table键的有: number, string, boolean, function, table, thread.

· 不能作为 table键的有: nil.

· userdata未知

表的构造

第一种方式:

-- 使用花括号来创建一个空表, 然后赋值

mytab = {}

mytab['x'] = 12

mytab[2] = 'hello'

第二种方式:

-- 创建表的时候, 同时初始化表数据

-- 表中存储键值对数据, 格式如: [key] = value, 键和值可以是多种类型

mytab = {

['x'] = 12,

[2] = 'hello'

}

第三种方式

-- 同第二种方式, 不过非数字类型的键可以省略中括号, 数字类型不能省略

mytab = {

x = 12,

[2] = 'hello'

}

第四种方式

-- 想使用数字索引作为键时, 可以通过仅写值的方式声明,

-- 这样 Lua会按照声明顺序为值建立从1开始的自增的索引

-- 如果表中都是数字索引, 那么此时的表就是一个数组

mytab = {

1, 2, 3

}

表的遍历

第一种方式

-- 先构造一个表

mytab = {

11, 12, 13,

a = 'A',

b = 'B',

c = 'C'

}

-- 以下是最常用的两种遍历方式

-- 全表遍历

-- 这种遍历方式是按照 table中 key的 hash值排列顺序来遍历的,

-- 并非是 table中 key的定义顺序, 并且不关心 key是否从1开始和 key是否以1递增

for k, v in pairs(tab) do

print(k, v)

end

-- [[

output:

1 11

2 12

3 13

c C

b B

a A

]]

-- 仅遍历表中的数组部分

-- 按照 key的大小顺序来遍历 (注意不是 key定义的顺序)

-- 因为表中非数字键的键值对是使用 hash表存储的, 这样的数据是无序的, 所以无法遍历

for k, v in ipairs(mytab) do

print(k, v)

end

--[[

output:

1 11

2 12

3 13

]]

-- 第三种方式

-- #mytab可以获取到 mytab表中的数组部分的元素个数

for i = 1, #mytab do

print(mytab[i])

end