首页 > 解决方案 > 按值排序,使用命名键 lua

问题描述

尝试了一些不同的解决方案,我试图做的是找到一个好的快速,而不是性能饥饿的方式在使用命名键的 lua 中对数组进行排序,我知道不支持命名键,并且需要某种更改为为此设置的值键。

数据结构

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

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

所以如果面包有夸克的标签,消音器有山羊的标签。

应该是山羊夸克

我知道如何绕过它并按命名键排序,现在我想出了一个。

但我不确定我能做些什么来实际按标签进行排序,并以这种方式排序。

希望有人能够在正确的方向上引导我在这里做什么。

标签: arrayssortinglua

解决方案


将要排序的元素放入列表中。

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 ],列表[i]))。如果未给出 comp,则使用标准 Lua 运算符 < 代替。请注意,comp 函数必须对列表中的元素定义严格的偏序;也就是说,它必须是不对称的和传递的。否则,可能无法进行有效排序。排序算法不稳定:给定顺序认为相等的元素可能会因排序而改变它们的相对位置。

table.sort(list, function(a,b) return a.label < b.label end)

推荐阅读