【发布时间】:2012-01-08 21:51:44
【问题描述】:
首先对不起我的英语 - 我希望你能理解我。
有一个哈希:
$hash{a} = 1;
$hash{b} = 3;
$hash{c} = 3;
$hash{d} = 2;
$hash{e} = 1;
$hash{f} = 1;
我想按值(不是键)对其进行排序,所以我有:
for my $key ( sort { $hash{ $a } <=> $hash{ $b } } keys %hash ) { ... }
首先我得到所有值为 1 的键,然后是值为 2,等等......太好了。
但是如果哈希没有改变,键的顺序(在这个按值排序中)总是相同的。
问题:我怎样才能打乱排序结果,所以每次我运行“for”循环时,我都会得到值 1、值 2 等不同顺序的键?
【问题讨论】:
-
你想对它进行排序,但是对于具有相同值的键有一个随机顺序,对吧?
-
我在 for 循环中“排序”之前只尝试了洗牌(来自 List::Util),但这显然没有用,因为它洗牌了整个哈希。乔纳森:是的,那是正确的。
-
等等,你是想随机化返回键的顺序(排序后,仍然保持按值排序),还是按值排序之前的键顺序?
-
我想随机化返回键的顺序。
-
@gibson:见下文,这不是最优雅或最完美的,但这是逻辑