lua 链表,集合,字符串缓冲

链表简单实现:

头结点变量:list

插入操作:

list = {next = list,value = v} 

集合的实现:

用集合的元素作为引用放入到table

基本结构:

local reserved = { ["white"] = true, ["red"] = true, ["function"] = true, }
if reserved["white"] then
    --访问
end

完整过程:

local Set= {}
function Set:new(t)

	local set = {}
	for k,v in pairs(t) do
		set[v] = (set[v] or 0) + 1
	end

	setmetatable(set, self)
	self.__index = self
	return set
end

function Set:insert(value)
	self[value] = (self[value] or 0) + 1
end

function Set:remove(value)
	local count = self[value]
	self[value] = (count and count > 1) and count - 1 or nil
end

字符串缓冲:

逐行读取文件:

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

假如buff目前已经存储了一个50kb的字符串,line每次读取大小为20字节。当执行代码buff=buff..line.."\n"时,就会创建50020字节的新字符串,并从buff中复制至少50kb到新的字符串。所以如此的话,没读取一行就会移动至少50KB的内存。在读取了100行(2KB的字符)时,就至少移动了5MB的内存,所以这种做法在读取较大文件是不可取的。

所以很多语言提供了StringBuffer来解决这个问题。

在lua中用table在做类似的事:

local t={}
for line in io.lines() do
   if(line==nil) then break end
   t[#t+1]=line
end
local s=table.concat(t,"\n")  --将table t 中的字符串连接起来






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值