Lua 中处理较大的字符串

我是一位使用 Lua 开发名为 TableTop Simulator 的游戏的 hobbest modder。

我有一个包含有多行数据的字符串列表,表示一副纸牌。

示例:
2x 黑木案实行员
1x 巡逻车
3x 短丝
1x 成年深海神话
1x 深海神话突击队员
1x 阴影礁石
3x 广场恐惧症

我的目标是将该字符串转换为格式化的语句,以便我可以使用这些卡牌和数量构建一个牌堆。

我想尝试创建一个类似于以下的表格...

deckList{}
   deckList [1] .name = '黑木案实行员'
   deckList [1] .quantity = 2
   deckList [2] .name = '巡逻车'
   deckList [2] .quantity = 1

等等...。

然后我可以使用名称字符串来查找匹配的卡片,然后使用数量值来取出相同数量的卡片。

我的问题是我不知道该如何做...我需要某种方式来分离每一行并提取值。我认为由于它总是 1、2、3,而不是切割和复杂,我可以将一行转换为'1x ',因为删除它将完美地离开'名称'以供搜索。但我还需要阅读每一行和处理其他事情。

点赞
用户1847592
用户1847592
local str = [[
2x Blackwood File Clerk
1x Patrol Wagon
3x Short Fuse
1x Adult Deep One
1x Deep One Assault
1x Shadowed Reef
3x Agoraphobia]]

local deckList = {}
for line in str:gmatch"[^\r\n]+" do
   local qty, name = line:match"^(%d+)x%s+(.-)%s*$"
   table.insert(deckList, {name = name, quantity = tonumber(qty)})
end

本地str变量包含了一个牌组列表。使用lua中的gmatch函数可以将str变量按照行分割成一个数组。在循环中,每行会使用match函数将数量和牌名提出来,并插入到deckList列表中。最终,我们可以通过访问deckList查看牌组内容。

2017-06-19 06:50:07