加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

通过perl中的多个键动态排序哈希数组

发布时间:2020-12-16 06:05:57 所属栏目:大数据 来源:网络整理
导读:在寻找一些指针时,关于如何按多个值对哈希数组进行排序,我遇到了以下解决方案: 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" },)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读