博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Lua学习笔记之数据结构
阅读量:5337 次
发布时间:2019-06-15

本文共 1772 字,大约阅读时间需要 5 分钟。

in Lua 一切数据结构皆由table带来

数组array

a = {}for i = -5, 5 , 1 do    a[i] = 0endprint(a[0])print(#a)  -- 5

数组中,可以用任何任何数字下标来索引元素,但是如果用#来对数组求长度,它只能返回从1开始的连续元素个数。

单链表list

list = {}list.insertnode = function ( v )    -- body    list.link = { nextv = list.link , value = v }endlist.output = function (  )    -- body    local link = list.link  -- 保留头结点不要被丢掉    while link do        print(link.value)        link = link.nextv    endendlist.insertnode( 1 )list.insertnode( 2 )list.insertnode( 3 )list.insertnode( 4 )list.insertnode( 5 )list.output()

链表的操作函数和链表本身封装在一起,都放在list当中,但是,本质是link,需要理解这样的写法是每一个节点都指向了一个新的链表,递归的理解这种定义方式比较舒服。

集合set

reserved = {    ["while"] = true, ["end"] = true,    ["function"] = true, ["local"] = true,}

就是保留字本身作为这个table的关键字。因为while,end等都是lua中的关键字,所以需要使用[“while”]来定义,否则直接 while= true是不行的。

string buffer

--io.read("*all")local buff = “”for line in io.lines() dobuff = buff..line..’\n’end

这段代码读取350KB大小的文件需要将近1分钟。

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

用这段代码读取350KB大小的文件 需要 0.5秒的时间。

图graph

local function name2nade( graph, name )    if not graph[name] then        --节点不存在,创建一个新的        graph[name] = { name = name, adj = {} }    end    return graph[name]endfunction readgraph( )    -- body    local graph = {}    for line in io.lines() do        --切分行中的两个名称        local namefrom , nameto = string.match(line,                                    "(%S+)%s+(%S+)")        -- 根据名称,得到相应的节点        local from = name2node( graph , namefrom )        local to = name2node( graph , nameto )-- 将 ’to’ 节点添加到 ‘from’的邻接集合        from.adj[to] = true    end    return graphend

由于lua本身很容易实现稀疏矩阵,那么,图本身就是一个二维数组,( i , j )节点用来表示 从i,j 的边此时可以赋值value来表示这个边的权重。无向图,对称矩阵,或三角矩阵表示就好。

转载于:https://www.cnblogs.com/appleegig/p/3901811.html

你可能感兴趣的文章
spring注入Properties
查看>>
微信小程序开发之从相册获取图片 使用相机拍照 本地图片上传
查看>>
【BZOJ-2295】我爱你啊 暴力
查看>>
【BZOJ-1055】玩具取名 区间DP
查看>>
Bit Twiddling Hacks
查看>>
Windwos中的线程同步
查看>>
LeetCode : Reverse Vowels of a String
查看>>
时间戳与日期的相互转换
查看>>
jmeter(五)创建web测试计划
查看>>
python基本数据类型
查看>>
1305: [CQOI2009]dance跳舞 - BZOJ
查看>>
关于TDD的思考
查看>>
Cocos2d-x学习之windows 7 android环境搭建
查看>>
将html代码中的大写标签转换成小写标签
查看>>
jmeter多线程组间的参数传递
查看>>
零散笔记
查看>>
Activity
查看>>
事件驱动模型
查看>>
LiteDB源码解析系列(1)LiteDB介绍
查看>>
你真的懂示波器吗?工作面试中会用到的示波器知识(转)
查看>>