You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 07:36:19