Lua如何将字符串拆分并存入table表的各个条目
Lua 实现魔方公式拆分与逻辑优化方案
字符串拆分实现
针对R U R' U'这类空格分隔的转动公式,不需要使用复杂的通用字符串拆分函数,直接用Lua内置的模式匹配即可实现稳定拆分,代码如下:
-- 输入公式字符串,返回拆分完成的转动标记表 local function split_moves(formula) local moves = {} -- 匹配所有连续非空格字符,刚好对应每一个独立转动标记 for move in string.gmatch(formula, "%S+") do moves[#moves + 1] = move end return moves end -- 调用测试 local test_formula = "R U R' U'" local move_list = split_moves(test_formula) --[[ 运行后move_list结构为: { [1] = "R", [2] = "U", [3] = "R'", [4] = "U'" } 完全匹配需求 ]]
之前找到的通用拆分方案无法运行,大多是没有处理好模式匹配边界、或者适配的分隔符场景和空格不匹配,上面的写法针对空格分隔的场景做了简化,没有冗余逻辑,运行更稳定。
处理逻辑效率优化
你目前采用「先查标记在索引表的位置、再按位置从取值表取内容」的逻辑,当标记总数多、公式长度大时,每次遍历找索引会产生不必要的性能开销,直接改用键值对映射即可把单次查找的时间复杂度降到O(1),优化后的完整逻辑如下:
-- 直接建立转动标记到目标值的映射,省略中间查索引的步骤 local move_value_map = { ["R"] = "r^", ["R'"] = "r^'", ["U"] = "u^", ["U'"] = "u^'", -- 按需补充L、L'、D、D'、F、F'、B、B'等所有需要的标记对应值即可 } local function process_formula(input_formula) local output = {} for move in string.gmatch(input_formula, "%S+") do local target_val = move_value_map[move] -- 可选:增加非法标记校验 if not target_val then error(string.format("存在不支持的转动标记:%s", move)) end output[#output + 1] = target_val end return output end
这个写法把拆分和映射处理合并到了一次遍历里,不需要先生成中间表再二次遍历,内存占用和运行速度都比原有逻辑更好。
内容的提问来源于stack exchange,提问作者Drogobo
相关产品推荐
相关产品推荐

