【问题标题】:Merge function in LuaLua中的合并功能
【发布时间】:2011-03-18 05:44:27
【问题描述】:

嘿,我正在尝试在 Lua 中实现合并排序的合并功能。我非常了解该算法,但我是 Lua 的新手。我不断收到“'insert' 的错误参数 #1(表预期,得到 nil)”我相信错误指向我的递归调用。我无法弄清楚,我觉得这是一件非常微不足道的事情。我只需要一个 Lua 大师给我一些指导。谢谢。这是我的功能:

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

    else 
        tmp = l2[1]
        table.remove(l2,1)
        return table.insert(merge(l1,l2),tmp)
    end
end
end

【问题讨论】:

    标签: sorting merge lua


    【解决方案1】:

    我不完全确定你想用merge 函数实现什么,但一个明显的问题是table.insert 不返回表,而是返回nil

    将合并结果存储在表t 中,在t 上使用table.insert,最后返回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 中所有变量默认都是全局的。

    【讨论】:

    • 嘿。感谢您的提示!效果很好!合并函数采用两个已经排序的表并将它们合并到一个排序表中。我必须将 table.insert(t, tmp) 更改为 table.insert(t, 1, tmp) 以便它将项目插入到返回表的开头。
    • Mike K,我想你忘了将 ponzao 的答案标记为正确。
    猜你喜欢
    • 2011-05-30
    • 2010-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-13
    • 2011-02-05
    • 2020-06-01
    • 1970-01-01
    相关资源
    最近更新 更多