sorting - Lua - 按字母顺序对表格进行排序

标签 sorting lua

我有一个表格,其中填充了用户输入的随机内容。我希望我的用户能够快速搜索该表,而一种促进他们搜索的方法是按字母顺序对表进行排序。最初,表格看起来像这样:

myTable = {
    Zebra = "black and white",
    Apple = "I love them!",
    Coin = "25cents"
}

我能够实现 pairsByKeys() 函数,它允许我按字母顺序输出表格内容,但不能以这种方式存储。由于搜索的设置方式,表格本身需要按字母顺序排列。

function pairsByKeys (t, f)
    local a = {}
    for n in pairs(t) do
        table.insert(a, n)
    end
    table.sort(a, f)
    local i = 0      -- iterator variable
    local iter = function ()   -- iterator function
        i = i + 1
        if a[i] == nil then
            return nil
        else
            return a[i], t[a[i]]
        end
    end
    return iter
end

一段时间后我开始明白(也许不正确 - 你告诉我)非数字索引表不能按字母顺序排序。因此,我开始考虑解决这个问题的方法 - 我想到的一种方法是对表格进行排序,然后将每个值放入一个数字索引数组中,如下所示:

myTable = {
    [1] = { Apple = "I love them!" },
    [2] = { Coin = "25cents" },
    [3] = { Zebra = "black and white" },
}

原则上,我觉得这应该可行,但出于某种原因,我遇到了困难。我的表似乎没有排序。这是我使用的函数,与上述函数一起对表格进行排序:

SortFunc = function ()
    local newtbl = {}
    local t = {}
    for title,value in pairsByKeys(myTable) do
        newtbl[title] = value
        tinsert(t,newtbl[title])
    end
    myTable = t
end

myTable 仍然没有被排序。为什么?

最佳答案

Lua 的 可以是混合的。对于从 1 开始的数字键,它使用 vector,对于其他键,它使用 hash

例如,{1="foo", 2="bar", 4="hey", my="name"}
1 & 2,将被放置在一个向量中,4 & my 将被放置在一个哈希表中。 4 破坏了序列,这就是将其包含在哈希表中的原因。

有关如何对 Lua 表进行排序的信息,请查看此处:19.3 - Sort

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

相关文章:

c - 如何正确调用这个合并排序函数?

从C调用Lua函数: Minimal example results in LUA_ERRRUN

C 和 Lua - 将 native 对象实例传递给 native Lua 函数

Lua, Require, 可用函数

variables - Lua:为什么改变一个变量的值也会改变另一个变量的值?

string - 5.2 的 Lua 字符串分割

Xcode 通过 X-Cord 对 UIImages 数组进行排序

javascript - VueJS2 排序 JSON 数组

algorithm - 用于昂贵交换的排序算法?

c++ - 有人可以解释一下桶排序的实现是如何工作的吗?