通过多个键对哈希数组进行排序Perl [英] Sorting an Array of Hash by multiple keys Perl

查看:265
本文介绍了通过多个键对哈希数组进行排序Perl的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个包含哈希值(即@AOH)的数组引用

I have an array referance containing hashes (i.e. @AOH)

$arr_ref = [ { 'brand' => 'A',
               'supplier' => 'X',
               'PO' => '2'
              },
              { 'brand' => 'B',
                'supplier' => 'Y',
                'PO' => '1'       
              },
              { 'brand' => 'B',
                'supplier' => 'X',
                'PO' => '2'           
              },
              { 'brand' => 'A',
                'supplier' => 'X',
                'PO' => '1'
              },
              { 'brand' => 'B',
                'supplier' => 'X',
                'PO' => '1'           
              }
];

我想根据所有三个键(即品牌,供应商和采购订单)对它进行排序. 排序顺序应该是品牌,然后是供应商,然后是采购订单.

I want to sort it on the basis of all three keys (i.e. brand, supplier and PO). Order of sorting should be brand first, then supplier and then finally on PO.

排序后的数组引用应为:

array referance after sorting should be:

$arr_ref = [ { 'brand' => 'A',
                'supplier' => 'X',
                'PO' => '1'
              },
              { 'brand' => 'A',
               'supplier' => 'X',
               'PO' => '2'
              },
              { 'brand' => 'B',
                'supplier' => 'X',
                'PO' => '1'           
              },
              { 'brand' => 'B',
                'supplier' => 'X',
                'PO' => '2'           
              },              
              { 'brand' => 'B',
                'supplier' => 'Y',
                'PO' => '1'       
              },
];

推荐答案

由于 <=>cmp 返回0表示相等,这是错误的,并且因为Perl的逻辑布尔运算符返回的是确定值,而不是仅返回0或1,所以通过多个键进行排序就像将多个比较与||:

@$arr_ref = sort { $a->{brand}    cmp $b->{brand}    or 
                   $a->{supplier} cmp $b->{supplier} or 
                   $a->{PO}       <=> $b->{PO} 
                 } @$arr_ref;

我假设PO是一个数字字段,所以您对它使用<=>而不是cmp.

I'm assuming that PO is a numeric field, so you use <=> for it instead of cmp.

这篇关于通过多个键对哈希数组进行排序Perl的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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