在寻找一些指针时,关于如何按多个值对哈希数组进行排序,我遇到了以下解决方案:
Sorting array of hash by multiple keys.
Sorting array of hash by multiple keys.
但是,似乎无法想出一种动态地做到这一点的方法.
比如,如果要排序的参数(此处为:哈希键)的数量将取决于用户输入.
$arr_ref = [ { 'brand' => 'A','supplier' => 'X','PO' => '2' },{ 'brand' => 'B','supplier' => 'Y','PO' => '1' },'PO' => '2' },{ 'brand' => 'A','PO' => '1' },'PO' => '1' }
].
用户可以通过“品牌”,“品牌”和“供应商”或所有三个来提供是否要对其进行排序.
解决方法
创建一个执行排序的子例程.它接受任意数量的键来进行比较:
use strict; use warnings; my @array = ( { 'brand' => 'A','PO' => '2' },'PO' => '1' },); sub custom_sort { my ($x,$y,@keys) = @_; for (@keys) { my $cmp = $x->{$_} cmp $y->{$_}; return $cmp if $cmp; } return 0; } my @sorted = sort {custom_sort($a,$b,'brand','supplier','PO')} @array; use Data::Dump; dd @sorted;
输出:
( { brand => "A",PO => 1,supplier => "X" },{ brand => "A",PO => 2,{ brand => "B",supplier => "Y" },)