通过多个键Perl排序一组哈希

我有一个包含哈希的阵列参考(即@AOH)
$arr_ref = [ { 'brand' => 'A','supplier' => 'X','PO' => '2'
              },{ 'brand' => 'B','supplier' => 'Y','PO' => '1'       
              },'PO' => '2'           
              },{ 'brand' => 'A','PO' => '1'
              },'PO' => '1'           
              }
];

我想根据所有三个键(即品牌,供应商和采购订单)进行排序.
排序顺序应该是品牌第一,然后是供应商,然后最终在PO上.

排序后的数组参考应为:

$arr_ref = [ { 'brand' => 'A','PO' => '1'           
              },];

解决方法

由于 <=> and 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.

相关文章

1. 如何去重 #!/usr/bin/perl use strict; my %hash; while(...
最近写了一个perl脚本,实现的功能是将表格中其中两列的数据...
表的数据字典格式如下:如果手动写MySQL建表语句,确认麻烦,...
巡检类工作经常会出具日报,最近在原有日报的基础上又新增了...
在实际生产环境中,常常需要从后台日志中截取报文,报文的形...
最近写的一个perl程序,通过关键词匹配统计其出现的频率,让...