gpt4 book ai didi

perl - 排序多级 Perl 散列(基于算术动态)

转载 作者:行者123 更新时间:2023-12-04 21:44:12 24 4
gpt4 key购买 nike

如何根据键值对多级 perl 哈希进行排序(和打印)?

%hash = (
a => { k1 => 51, k2 => 52, k3 => 53 },
b => { k1 => 61, k2 => 62, k3 => 63 },
c => { k1 => 71, k2 => 72, k3 => 73 },
)

例如,根据 k2 的值对上述哈希进行数字排序?所以它应该打印:

52,62,72

我想知道如何将排序单级散列扩展到多级使用

sort { $hash{$b} <=> $hash{$a} } keys %hash`

编辑

如果我有另一个哈希

my %property = ( a => 7, b => 6, c => 5 )

我可以根据 $hash{key}{k2} * $property{key} 的数值对 %hash 进行排序吗使用

#!/usr/bin/perl
use strict;
use warnings;

my %hash = (
a => { k1 => 51, k2 => 52, k3 => 53 },
b => { k1 => 61, k2 => 62, k3 => 63 },
c => { k1 => 71, k2 => 72, k3 => 73 },
);

my %property = ( a => 7, b => 6, c => 5 );


foreach (sort { ($hash{$a}{'k2'}*$property{$a}) <=>
($hash{$b}{'k2'}*$property{$b}) } keys %hash)
{
printf("[%d][%d][%d]\n",
$hash{$_}{'k2'},$property{$_},$hash{$_}{'k2'}*$property{$_});
}

结果应该是

72,52,62    as products are (360(72*5),364(52*7),372(62*6))

最佳答案

获取散列中所有值的列表:

values %hash;

将哈希引用列表转换为 k2 条目的内容:

map $_->{k2}, @list

哦,如果它是undef/不存在就跳过它:

map $_->{k2} // (), @list

按数字对列表进行排序:

sort { $a <=> $b } @list

连接点:

sort { $a <=> $b } map { $_->{k2} // () } values %hash;

关于perl - 排序多级 Perl 散列(基于算术动态),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17196387/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com