Lua中的合并函数

嘿,我正在尝试在 Lua 中实现归并排序中的合并函数。我很了解算法,但我是 Lua 的新手。我一直收到“插入项 #1 错误(表格期望,但得到了 nil)”的消息。我认为错误指向了我的递归调用。我无法弄清楚,我有一种感觉这是一个相当琐碎的问题。我只需要一位 Lua 大师给我一些指导。谢谢。这是我的函数:

原文链接 https://stackoverflow.com/questions/3286796

点赞
stackoverflow用户206020
stackoverflow用户206020

我并不完全确定你想通过 merge 函数做什么,但一个明显的问题是 table.insert 不会返回一个表,它返回的是 nil

在表格 t 中存储合并的结果,使用 table.insertt 上并最后返回 t 看起来不会像以前那样出错。

function merge(l1, l2)
    if #l1 == 0 then
        return l2
    elseif # l2 == 0 then
        return l1
    else
        if l1[1] <= l2[1] then
            local tmp = table.remove(l1, 1)
            local t = merge(l1, l2)
            table.insert(t, tmp)
            return t
        else
            local tmp = table.remove(l2, 1)
            local t = merge(l1, l2)
            table.insert(t, tmp)
            return t
        end
    end
end

关于我所做的其他修改的一些注解。table.remove 会返回被删除的元素,因此你不需要先访问再删除。我建议使用 local 关键字来声明变量,因为在 Lua 中 默认情况下所有变量都是全局的。

2010-07-20 07:42:12