【发布时间】:2015-11-11 05:49:19
【问题描述】:
我有一个包含两个值的表,一个是 name(字符串和唯一),另一个是数字值(在本例中为 hearts)。我想要的是:按 hearts 对表格进行排序,但在出现平局时随机打乱项目(例如 hearts 相等)。通过标准排序功能,如果出现平局,顺序始终相同,并且每次排序功能工作时我都需要它不同。 这是一个例子:
tbl = {{name = "a", hearts = 5}, {name = "b", hearts = 2}, {name = "c", hearts = 6}, {name = "d", hearts = 2}, {name = "e", hearts = 2}, {name = "f", hearts = 7}}
sort1 = function (a, b) return a.hearts > b.hearts end
sort2 = function (a, b)
if a.hearts ~= b.hearts then return a.hearts > b.hearts
else return a.name > b.name end
end
table.sort(tbl, sort2)
local s = ""
for i = 1, #tbl do
s = s .. tbl[i].name .. "(" .. tbl[i].hearts .. ") "
end
print(s)
现在,使用 sort2 函数,我想我完全解决了问题。问题是,当a.hearts == b.hearts 时会发生什么?在我的代码中,它只是按他们的名字来排序,而不是我想要的。我有两个想法:
- 先随机打乱表中所有项目,然后申请
sort1。 - 为表格的每个元素添加一个值,称为
rnd,这是一个随机数。然后在sort2,当a.hearts == b.hearts按a.rnd > b.rnd订购商品。 - 在
sort2中,当a.hearts == b.hearts随机生成真假并返回。它不起作用,我理解这是因为随机的真/假会导致订单函数崩溃,因为可能存在不一致。
我不喜欢 1(因为我想在排序函数中做所有事情)和 2(因为它需要添加一个值),我想做一些类似 3 的事情,但可以工作。问题是:有没有办法以简单的方式做到这一点,这样做的最佳方式是什么? (也许,方法 1 或 2 是最佳的,但我不明白)。
额外问题。此外,我需要修复一个项目并对其他项目进行排序。例如,假设我们希望 "c" 排在第一位。做一个单独的表,只有要排序的项目,排序表,然后添加固定的项目是不是很好?
【问题讨论】:
标签: sorting random lua lua-table