sorting - Lua 按字母顺序对表进行排序,数字除外

标签 sorting lua lua-table

我想按字母顺序对表格进行排序。除了数字。

下面的代码显示了如何使用比较器函数对表格进行排序:

function( a,b ) return a.N < b.N end

给我:

obj = {
    [1] = {
        ["N"] = "Green 1";
    };
    [2] = {
        ["N"] = "Green 11";
    };
    [3] = {
        ["N"] = "Green 2";
    };
    [4] = {
        ["N"] = "Red 1";
    };
}

但我希望它像这样排序:

obj = {
    [1] = {
        ["N"] = "Green 1";
    };
    [2] = {
        ["N"] = "Green 2";
    };
    [3] = {
        ["N"] = "Green 11";
    };
    [4] = {
        ["N"] = "Red 1";
    };
}

可能吗?

最佳答案

试试这个:

local function split(a)
    local x,y=a.N:match("(%S+)%s+(%S+)")
    return x,tonumber(y)
end

table.sort(obj,
    function (a,b)
        local a1,a2=split(a)
        local b1,b2=split(b)
        return a1<b1 or (a1==b1 and a2<b2)
    end
)

关于sorting - Lua 按字母顺序对表进行排序,数字除外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27909784/

相关文章:

php - 如何覆盖 CActiveDataProvider 方法以在 Yii 中默认以降序显示 CGridview

lua - 隐藏一个可继承的Lua并且只暴露对象的属性

multidimensional-array - 嵌套数组lua的长度

arrays - 排序和选择几乎排序的数组

algorithm - 一小部分输入的比较排序下限?

python - 如何在字典列表中找到公共(public)键并按值对它们进行排序?

c - luajit ffi 实现 block 终结器

lua - 理解这个 Lua 片段

c++ - 使用 SWIG 包装 C++ 类以在 Lua 中使用它 - 需要简单的示例

optimization - 表访问 vs 函数调用 + 条件判断 : which is faster?