使用命名键进行值排序 Lua

尝试了一些不同的解决方案,我想做的是找到一种快速且性能不受影响的在 Lua 中排序带有命名键的数组的方式,我知道命名键不被支持,需要对值键进行某种形式的更改才能实现。

数据结构

[item] => table: 00000275C74CF140 {
          [bread] => table: 00000275C74CE1C0 {
                       [quantity] => 415
                       [item] => bread
                       [label] => Quark
                     }
          [silencer] => table: 00000275C74CE1C0 {
                          [quantity] => 5
                          [item] => silencer
                          [label] => Goat
                        }
        }

我想按标签排序,以便按正确顺序打印出来。

所以如果面包标签为 Quark,号角标签为 Goat。

应该是 Goat Quark

我知道如何绕过它并按命名键排序,这个我弄明白了。

但我不确定我该怎么办才能按标签顺序排序并以这种方式进行排序。

希望有人能够指导我在这里该做什么。

点赞
用户2858170
用户2858170

将你想要排序的元素放入一个列表中。

local list = {}
for k,v in pairs(yourTable) do
  table.insert(list, v)
end

然后使用 table.sort 对该列表进行排序。

table.sort (list [, comp]) 按给定顺序原地对列表元素进行排序,从 list[1] 到 list[#list]。如果给出了 comp,则必须是一个函数,它接收两个列表元素,并在最终顺序中第一个元素必须在第二个元素之前返回 true(因此,在排序后,i < j 意味着不是 comp(list[j], list[i])) 。如果没有给出 comp,则使用标准 Lua 运算符<。请注意,comp 函数必须定义列表中元素的严格偏序;即,它必须是不对称和传递的。否则,可能无法进行有效的排序。排序算法不稳定:按给定顺序相等的元素可能会被排序更改其相对位置。

table.sort(list, function(a,b) return a.label < b.label end)
2020-06-09 16:59:17