Lua初识之表的构造-六

来源:互联网 发布:淘宝与描述相符评分 编辑:程序博客网 时间:2024/05/01 02:06

Lua初识之表的构造

构造器是创建初始化表的表达式,表是Lua特有的功能强大的东西,最简单的构造函数是{}, 用来创建一个空表。

Lua 中没有单独给出 数组、哈希表、链表、类的概念,所有这些在Lua 中都是以 Table(表)的形式使用。

一、以数组形式使用表
定义表

初始化表local days = {}-- 两种获取数组长度方法local length = #daysprint(length)          --> 0-- 获取数组长度length = table.getn(days)print(length)      --> 0向数组中填充数据days = {"Sunday", "Monday", "Tuesday"}-- 获取数组长度方法local length = #daysprint(length)          --> 3 (获取到的数组长度为 3)-- 遍历表, 从 1 开始 到 数组长度 #days (3)-- Lua 和其他语言不同的是,Lua 中下表是从 1 开始的for i = 1,#days do    print(days[i])    -- end输出结果 SundayMondayTuesday

向数组中添加数据

向下标 45 中插入 数据days[4] = "Wednesday"days[5] = "Thursday"local length = #daysprint(length)          --> 5 (获取到的数组长度为 5)print(days[4])      --> Wednesdayprint(days[5])      --> Thursday-- 使用 table 提供的 insert 方法插入数据,默认插入到最后一个(以后介绍)table.insert(days, "Friday")清空表的一个方法days = {} -- 表中所有数据清空

– 数组进阶实现 二维数组(矩阵)

local arr = {}for i = 1, 5 do    arr[i] = {}   -- 定义 table  arr 的第 i 项为一个 table    for j = 1, 5 do    -- arr[i] 为 table , 向arr[i] 的第 j项添加数据    -- 作为 数组使用 table    arr[i][j] = i * 10 + j     endend-- 遍历数组for i = 1, 5 do    for j = 1, 5 do    print( arr[i][j])    endend

二、以哈希表使用 table

-- 定义 哈希表local hash = { ["a"] = 1, ["b"] = 2, c = 3}-- 以 键(key)获取 数据print("a".."      "..hash["a"])    --> a     1print("b".."      "..hash["b"])    --> b     2print("c".."      "..hash["c"])    --> c     3-- 下面方法同样可以获取到数据print("a".."      "..hash.a)       --> a     1print("b".."      "..hash.b)       --> b     2print("c".."      "..hash.c)       --> c     3-- 添加数据hash["d"] = 5print(hash["d"])      --> 5print(hash.d)         --> 5-- 获取 hash 长度local length = #hashprint(length)      -->   0因为上面几个值是以 键值对的形式既哈希表的方法使用 table, 这样获取 table 的长度 为 0, hash[1]、hash[2]、、 获取为 nil-- 看下面local hash = { ["a"] = 1, ["b"] = 2, c = 3, 5, "AAA", 7}-- 获取 hash 长度local length = #hashprint(length)      -->   3-- 上面添加 5, "AAA", 7 三项后 数组长度就为 3 了print(hash[1])     -->   5print(hash[2])     -->   AAAprint(hash[3])     -->   7--  清空 表 hash 数据hash = {}for i = 1, 5 do   -- 将 i 转换为字符串作为 key   local key = tostring(i)   -- 向 hash 中添加 键值对   hash[key] = i * 10end-- 遍历 hashfor i = 1, 5 do   -- 将 i 转换为字符串作为 key   local key = tostring(i)   -- 向 hash 中添加 键值对   print( hash[key])   --> 10, 20, 30, 40, 50end

三、以链表形式使用 table

-- 定义一个空链表local list = nili = 1while i < 10 do    -- 每一项存入一个数值 i    list = { next = list, value = i}    i = i + 1end-- 遍历链表local listT = listwhile listT do    print(listT.value)   --> 9, 8, 7, 6, 5, 4, 3, 2, 1    listT = l.nextend----------------------------------local list = nili = 1while i < 10 do    local a = { 1, 2, 3}    -- 每一项存入一个数值 a    list = { next = list, value = a}    i = i + 1endlocal listT = listwhile listT do    local a = l.value    for i = 1, 3 do        print(a[i])    end    listT = l.nextend
0 0