遇到的问题
公司前端的技术栈是 C++ & lua & python, C++、lua做业务开发,python做工具。
lua特别好用的东西就是load, 将某些数据(一般是excel)转成lua的table存储,用的时候直接load进来。
但是,有些数据,并不是excel转过来的,通过多个excel来组成。
例如:
描述: 一个卡牌游戏,肯定有一张卡牌表,在表中我可以知道每张卡牌属于哪个职业。
Question: 在游戏中,我想知道某职业所有卡牌,怎么办呢?
我需要遍历这个卡牌表,然后把相应职业的卡牌筛选出来。
但是,这个方法随着卡牌库的增加,所花费的时间也不断增加,早晚会出事呀。
当然,可以通过各种人为规定,算法设计来加快速度。
可是,都没有根本去解决问题。
回过头来,可以发现,当我们有了这张卡牌表,我就可以知道某职业都有哪些牌。
这就是像卡牌表一样,不需要在游戏中动态去生成,直接可以本地存储静态的一个职业对应卡牌的表。
这样,即使生成这张表再慢,也不会消耗游戏运行中的时间和性能。
解决问题
分析
现在目标很明确了,我要把n个表,根据需求组合拼装成1个表。
麻烦的是,表的生成这些东西,我们都已经做成脚本,交给策划生成了。
这个东西,肯定也需要交给策划进行。
不可能让策划打完表以后,程序再去执行一遍lua脚本。
(PS:这种东西一定要规避掉,一定要学会自动化,工具化。不要把我们的时间浪费在这些可以自动化、工具化的东西上。)
所以,目前状况是:
语言:python
输入:n张lua表
输出:1张lua表
逻辑:一系列插入、查找、遍历等
中间的逻辑就不用多说了,python的dict 和 lua的table用法也挺像的。
主要处理两个问题:
- 将lua table 转换成 python dict
- 将python dict 转换成 lua table
大概思路
在动手前,肯定要看有没有好的现成的轮子。重复造轮子还是不要了吧,不一定造的比人家好呢。
经过一番查找,发现了 slpp[ https://github.com/SirAnthony/slpp ]
它可以实现lua table 和 python dict之间的转换。
但是,它是python2.x版本。
然后,在推送请求上看到,有人已经做了python3.x版本。 slpp-23[ https://github.com/IlyaSkriblovsky/slpp-23 ]
一些细节
大概的方向差不多了,剩下的就是符合我所需要的格式。
因为,我的文件格式是这样的:
local xx_xx = {
[1] = {
...
},
[2] = {
...
},
...
}
return xx_xx
对于输入要求,还简单一些:
"""
描述:
将lua的table转成python的dict
参数:
table_file_name - string
文件名(需要加后缀)
返回:
dict格式的table
"""
def convertLuaTableToPythonDict(table_file_name):
content = ""
with open(table_file_name, 'r', encod