《Programming in Lua 3》读书笔记(九)

PartⅠ 已经看完了,然后进入了partⅡ阶段了。


日期:2014.7.6
Part Ⅱ 11
Data Structures
Lua中的数据结构都是以table实现的

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

Lua实现push/pop 操作
push
function List.pushfirst(list,value)
     local first = list.first - 1
     list.first = first
     list[first] = value
end

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

pop
function List.popfirst (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.poplast(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
可以看到pop、push操作都是对table的键进行加减-赋值操作而实现的,要注意的是键的增减和判断是否为空。

Set and Multiset
Set结构。在table中以元素为键,布尔值为值,使用中遍历table根据键值是否为true判断某个元素是否在set、table中。这里要注意的是table的形式:setTable = {["x"] = true,["y"] = true},因为在lua 中某些词如while、for等是关键字,使用中受限,如不能直接while = true,所以改用这种形式:["while"] = true。

Multiset结构。在table中,以元素为键,值表示为该元素的出现次数:muSet[ok] = 10,表明ok出现了10次。
insert和remove操作:
Insert
function insert (bag,element)
     bag[element] = (bag[element] or 0 ) +1
end

--判断某个元素是否已经在set中了
--如果某个元素已经在set、table中,则增加其计数

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


--判断该元素的计数
--如果计数已经为0了,则将该键的值置为nil,收回内存使用
--如果该计数不为0是大于1的,那么将该计数减一
--如果该计数不为0但是等于1,则将该键的值置为nil,收回内存使用

String Buffers结构。使用table的concat函数。将table中的string值连接起来返回。
e.g.
local t = {}
for line in io.lines() do
     t[#t + 1] = line .. "\n"          --table 的每个键对应一个string值
end
local s = table.concat(t)          --将table中所有的string值连在一起返回

--使用concat函数的第二个参数
e.g.
local t = {}
for line in io.lines() do
     t[#t + 1] = line          --table 的每个键对应一个string值
end
local s = table.concat(t,"\n")     --第二个参数表示在每两个string值间插入的值

Graphs--没看懂讲的是啥。。。标记


你可能感兴趣的:(读书笔记,Lua学习笔记)