排序表数组

问题描述 投票:4回答:1

这可能比我自己做起来容易。我对Lua不太陌生,但是有其他语言的经验。

我有一个看起来像这样的表:

local state = {}
state[1] = {
   show = true,
   changed = true,
   progressType = "static",
   value = 0,
   total = 9,
   name = "nine",
}

state[2] = {
   show = true,
   changed = true,
   progressType = "static",
   value = 0,
   total = 7,
   name = "seven",
}

state[3] = {
   show = true,
   changed = true,
   progressType = "static",
   value = 0,
   total = 8,
   name = "eight",
}

state[4] = {
   show = true,
   changed = true,
   progressType = "static",
   value = 0,
   total = 6,
   name = "six",
}

我需要做的是基于table[]的值对每个table.value5条目进行排序。我在文档中找不到任何明确表示它们不只是基本的table.sort功能的函数,所以我发现自己有些卡住了。我是否需要通过遍历并使用排序后的数据创建新表来进行手动排序?

lua
1个回答
4
投票

我在文档中找不到任何明确表示它们不只是基本table.sort的功能,所以我发现自己有些卡住。

我可能会误解您的问题,但在这种情况下table.sort正是您所需要的:

local state = {}
state[1] = {
   total = 9,
   name = "nine",
}

state[2] = {
   total = 7,
   name = "seven",
}

state[3] = {
   total = 8,
   name = "eight",
}

state[4] = {
   total = 6,
   name = "six",
}

-- Use table.sort with a custom anonymous function
-- to specify how to compare the nested tables.
table.sort(state, function (a, b) 
    return a.total < b.total
end)

for i=1, #state do
  print(i, state[i].name)
end

使用table.sort,您可以提供可选的自定义功能,该功能可以像您想要的那样简单或复杂。在这种情况下(根据您的问题),只需比较表的total值就足够了。

© www.soinside.com 2019 - 2024. All rights reserved.