Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl:按值进行哈希排序并获取密钥_Perl_Hash - Fatal编程技术网

Perl:按值进行哈希排序并获取密钥

Perl:按值进行哈希排序并获取密钥,perl,hash,Perl,Hash,是否有一些perl“魔力”可以通过按值排序的哈希进行迭代,但在迭代中获得密钥 按X排序并获取X很容易(键、值)-以及按键排序并获取值 谢谢 请记住,以后请举例说明您的数据、所需结果以及您编写的代码,并说明其中的错误 my %hash = ( one => 'a', two => 'b', three => 'c', four => 'd' ); for my $k ( sort { $hash{$a} cmp $hash{$b} } keys %hash ) {

是否有一些perl“魔力”可以通过按值排序的哈希进行迭代,但在迭代中获得密钥

按X排序并获取X很容易(键、值)-以及按键排序并获取值


谢谢

请记住,以后请举例说明您的数据、所需结果以及您编写的代码,并说明其中的错误

my %hash = ( one => 'a', two => 'b', three => 'c', four => 'd' );
for my $k ( sort { $hash{$a} cmp $hash{$b} } keys %hash ) {
    print "$k: $hash{$k}\n";
}
__END__
one: a
two: b
three: c
four: d
就目前而言,你的问题非常模糊,我不得不做出一些假设,这些假设可能是错的,也可能不是错的

它不是“神奇的”;您只需编写适当的
排序

这将按照相应值的升序对
%hash
的键进行排序

my @sorted_keys = sort { $hash{$a} cmp $hash{$b} } keys %hash;
您还可以像这样使用
List::UtilsBy
。它可能比简单的
排序
技术快得多,具体取决于您的数据

use List::UtilsBy 'sort_by';

my @sorted_keys = sort_by { $hash{$_} } keys %hash;

没有魔法。您必须获取所有键值对,按值排序(您自己,使用适当的函数),然后从您感兴趣的每一对中获取密钥。另请参见and和@Thilo:您不必“获取所有键值对”:它们已经在散列数据中排列整齐。@Borodin:我的意思是“你必须遍历散列的所有条目”,没有快捷方式。