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

如何使用Lua将复杂表转换为全小写形式?

如何使用Lua将表的键和值转换为全小写形式?

嘿,这个问题很容易解决!咱们结合Lua的内置字符串工具和表遍历就能搞定你的需求。先看看你的示例表(我稍微调整了格式让它更易读):

local originalTable = {
    {
        ["House"] = "bob",
        ["Roof"] = "steve",
        ["Door-Knob"] = "Richard",
        ["Rug-Duty"] = "mark",
    }
}

你的目标是把所有键(比如House、Door-Knob)和值(比如Richard)都转换成全小写,对吧?下面给你两种实用方案:

方案1:针对固定单层嵌套表

如果你的表结构就是外层数组+内层键值表,那可以写一个简单的遍历函数:

function convertToLower(inputTable)
    local result = {}
    -- 遍历外层数组的元素(你的表只有一个子表)
    for _, subTable in ipairs(inputTable) do
        local lowerSubTable = {}
        -- 遍历子表的每个键值对
        for key, value in pairs(subTable) do
            -- 把键和值都转成小写
            local lowerKey = string.lower(key)
            local lowerValue = string.lower(value)
            lowerSubTable[lowerKey] = lowerValue
        end
        table.insert(result, lowerSubTable)
    end
    return result
end

调用函数并验证结果:

local lowerCaseTable = convertToLower(originalTable)
-- 打印转换后的内容
for _, subTable in ipairs(lowerCaseTable) do
    for k, v in pairs(subTable) do
        print(k, v)
    end
end

输出会是:

house    bob
roof     steve
door-knob    richard
rug-duty     mark

方案2:通用递归版本(支持任意深度嵌套)

如果你的表可能有更深的嵌套(比如子表里面还有子表),那可以用递归函数处理所有层级的字符串:

function recursiveConvertToLower(input)
    -- 如果是表,递归处理每个键值
    if type(input) == "table" then
        local result = {}
        for k, v in pairs(input) do
            -- 只有字符串类型的键才转小写,数字/布尔键保持原样
            local lowerKey = type(k) == "string" and string.lower(k) or k
            -- 递归处理值
            local lowerValue = recursiveConvertToLower(v)
            result[lowerKey] = lowerValue
        end
        return result
    -- 如果是字符串,直接转小写
    elseif type(input) == "string" then
        return string.lower(input)
    -- 其他类型(数字、布尔等)直接返回原内容
    else
        return input
    end
end

这个版本能处理更复杂的结构,比如:

local nestedTable = {
    {
        ["House"] = {["Owner"] = "Richard", ["Size"] = "LARGE"},
        ["Roof"] = "steve"
    }
}
local lowerNested = recursiveConvertToLower(nestedTable)

转换后内层的Owner会变成owner,LARGE变成large。

关键说明

  • string.lower()是Lua内置函数,专门用来把字符串转成全小写,非字母字符(比如连字符-)会保持不变。
  • 我们优先构建新表返回,而不是修改原表,这样能避免意外破坏原始数据;如果需要直接修改原表,也可以调整代码逻辑。

内容的提问来源于stack exchange,提问作者Jose Gonzales

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:17:33