perl 按值对散列排序 * 但 * 返回键

rqdpfwrv  于 2022-11-24  发布在  Perl
关注(0)|答案(1)|浏览(189)

传入文件的格式为account:data。在本例中,数据为Y-SNP。
我想按值(SNPs)排序,并返回带有数据的键(帐户),这样我就可以保持两者的关联,这只打印数据,而对第二个字段进行常规数组排序也不起作用。

#!/usr/bin/perl

@lines = <STDIN>;
chomp @lines;
foreach (@lines)
{
  (@f) = split /:/,$_;
  $h{$f[0]} = $f[1];
}

@s = map { [ $_, $h{$_} ] } sort values %h;
foreach (@s) {print "@$_\n"}
qaxu7uf2

qaxu7uf21#

如果你想按值对一个哈希值进行排序,但要得到相关的键,你可以用一个自定义的排序函数来实现,比如:

my @sorted_keys = sort { $h{$a} <=> $h{$b} } keys %h;

这将返回%h中键的值的顺序,在本例中是按数字顺序<=>排序。如果要按字母顺序排序,请使用cmp
有关更多信息,请参见documentation of sort,其中甚至有一个类似的示例:

# this sorts the %age hash by value instead of key
# using an in-line function
my @eldest = sort { $age{$b} <=> $age{$a} } keys %age;

相关问题