利用Lua元表减少table冗余数据

lua配置表优化

前不久发现项目里的Lua配置表有不少配置项都是重复的,虽然这些重复项几乎不会影响游戏在运行时的内存大小(Lua中同一字符串在内存中只会存在一份),但是却会增大配置文件的大小。
想到可以利用lua的元表metatable去除这些重复的冗余数据,大致步骤如下:

  1. 统计原有配置表tableA中每个键值对出现的次数,若某个键值对的重复次数大于N,将其加到一个新的tableB中。
  2. 删去tableA中同时也在tableB中的重复键值对。
  3. 将tableB作为tableA的__index元表。这样一来,当试图访问tableA中不存在的元素时,会首先到tableB中查找,从而获取到"默认"配置。
Sheet = {}
Sheet[1]={["b"]="2",}
Sheet[2]={["c"]="2",}
Sheet[3]={["c"]="0",}
Sheet[4]={}
Sheet[5]={["c"]="1",}
local metatable = {
	["a"]="1",
	["c"]="3",
	["b"]="",
	["a"]="",
	["b"]="0",
}
for i, v in pairs(Sheet) do
	setmetatable(v, {__index = metatable})
end

当Lua表中重复的配置项比较多时(比如大于1000项),这种方法能够有效减少配置表文件的大小(实际应用下来大约减小了30%)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值