2017-10-18 142 views
-2

我散列引用到一个哈希看起来像这样如何通过降序/升序值和升序/降序键对perl中的散列引用进行排序?

my %hey = (
    144 => 'Abc_test1', 
    25 => 'sample2', 
    114 => 'User', 
    145 => 'abc_test2', 
); 

我想输出顺序

Abc_test1 
User 
abc_test2 
sample2 

,我应该能够在某个变量

任何帮助存储?

+0

'我的foreach $值(排序{$一个<=> $ B}值%嘿嘿){ 说$值; }'。你可以通过用'push(@array,$ value)'替换'say $ value'来轻松地将它们存储在一个数组中;'(不要忘记在'foreach'之前声明'@ array'。 –

+0

@JohnDoe我会将它添加为一个答案 –

+0

正如我看到你想要2种排序方法很好解释[这里](https://perlmaven.com/how-to-sort-a-hash-in-perl) –

回答

3

Sort正在使用表达式来计算排序事物的顺序,因此它不仅限于比较一件事物。在你的情况,你想是这样的......

my @sorted_values = map $hey{$_}, sort {$hey{$b} cmp $hey{$a} or $a <=> $b} keys %hey; 

它首先比较哈希值以降序排序。在两个值相同的情况下,它会比较键值并按升序排序。

+0

没有包需要。如果它不是'%hey',按照你的问题改变哈希名称。 –

+0

不适用于我..它需要任何显式包吗?因为我的错误日志显示它缺少显式包名称。但它工作正常在通用示例中,如果我在散列表中交换了键和值,那么即使你的代码工作正常,你的代码也能正常工作吗? –

+0

对不起,我的散列表我的散列表实际上是一个引用,你能相应地修改你的代码吗? –

0
values=[sort {$a<=>$b and $hey->{$a} cmp $hey->{$b}} keys %$hey], 
+0

这不提供问题的答案。以批判或作者作出澄清,离开低于其信息的评论中。 - [来自评论](/ review/low-quality-posts/17669833) – TommySM