我如何可以排序散列的数组一个Perl数组? [英] How can I sort a Perl array of array of hashes?

查看:111
本文介绍了我如何可以排序散列的数组一个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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆