我如何可以排序散列的数组一个Perl数组? [英] How can I sort a Perl array of array of hashes?
本文介绍了我如何可以排序散列的数组一个Perl数组?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
@aoaoh;$ aoaoh [0] [0] {21} = 31;
$ aoaoh [0] [0] {22} = 31;
$ aoaoh [0] [0] {23} = 17;为$ K(0 .. $#aoaoh){
对于$ I(0 .. $#aoaoh){
为$ VAL(键%{$ aoaoh [$ i] [$ K]}){
打印$ VAL = $ aoaoh [$ i] [$ K] {$ VAL} \\ n;
}
}
}
输出是:
22 = 31
21 = 31
23 = 17
但我希望它是
21 = 31
22 = 31
23 = 17
请告诉我这是错的。
另外我怎么数值,以便使我得到的输出
排序
23 = 17
22 = 31
21 = 31(如果2键具有相同的值,然后用更高的价值键入先来)
解决方案
听起来像你想要的:
为$ VAL(排序键%{$ aoaoh [$ i] [$ K]}){
和
为$ VAL(反向排序键%{$ aoaoh [$ i] [$ K]}){
虽然从您的评论看起来你不想一个纯粹的反向排序。你想创建自己的排序功能:
为$ VAL(排序{$ aoaoh [$ i] [$ K] - > {$ A}< => $ aoaoh [$ i] [$ K] - > {$ b} || $ A< = GT; $ b}键%{$ aoaoh [$ i] [$ K]}){
@aoaoh;
$aoaoh[0][0]{21} = 31;
$aoaoh[0][0]{22} = 31;
$aoaoh[0][0]{23} = 17;
for $k (0 .. $#aoaoh) {
for $i(0.. $#aoaoh) {
for $val (keys %{$aoaoh[$i][$k]}) {
print "$val=$aoaoh[$i][$k]{$val}\n";
}
}
}
The output is:
22=31 21=31 23=17
but i expect it to be
21=31 22=31 23=17
Please tell me where is this wrong.
Also how do I sort the values so that i get the output as
23=17 22=31 21=31 (if 2 keys have same value then key with higher value come first)
解决方案
Sounds like you want:
for $val (sort keys %{$aoaoh[$i][$k]}) {
and:
for $val (reverse sort keys %{$aoaoh[$i][$k]}) {
Although from your comment it looks like you don't want a pure reverse sort. You want to create your own sort function:
for $val (sort {$aoaoh[$i][$k]->{$a} <=> $aoaoh[$i][$k]->{$b} || $a <=> $b} keys %{$aoaoh[$i][$k]}) {
这篇关于我如何可以排序散列的数组一个Perl数组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文