【发布时间】:2014-01-08 03:42:48
【问题描述】:
我很难理解这一点,我敢肯定这只是今天变得密集的一个例子。我有一个类似这样的数据结构:
{
PDGFRA => [
{ "p.N659K" => 22 },
{ "p.D842Y" => 11 },
{ "p.I843_S847>T" => 9 },
{ "p.D842_H845del" => 35 },
{ "p.I843_D846delIMHD" => 24 },
{ "p.I843_D846del" => 21 },
{ "p.D842V" => 457 },
{ "p.N659Y" => 5 },
{ "p.M844_S847del" => 7 },
{ "p.S566_E571>K" => 8 },
{ "p.S566_E571>R" => 50 },
{ "p.V561D" => 54 },
],
}
我想打印出结果,按哈希值反向排序(从大到小),所以最终我会得到这样的结果
PDGFRA p.D842V 457
PDGFRA p.V561D 54
PDGFRA p.S566_E571>R 50
PDGFRA p.D842_H845del 35
.
.
.
etc.
我可以根据需要打印数据结构,但我似乎无法在打印数据之前弄清楚如何对数据进行排序。我试过这样排序:
for my $gene ( sort keys %matches ) {
for my $var ( sort { $a->{$var} <=> $b->{$var} } @{$matches{$gene}} {
print "$var\n";
}
}
但是无论我使用$var 还是$_ 似乎都不起作用,抱怨'$var' 没有定义,'$_' 没有初始化。我也尝试(真的很可怜!)使用施瓦兹变换,但我认为我什至没有接近这个:
for my $gene ( sort keys %matches ) {
my @sorted =
map { $_->[0] }
sort { $a->[1] <=> $b->[1] }
map { [ $_, $matches{$gene}->{$_} ] } @{$matches{$gene}};
}
有人介意指点我按内部哈希值对哈希或哈希数组进行排序的正确方向吗?
【问题讨论】:
-
数组 ref 中的所有 hash-refs 只会包含 1 个键?但它是每个 hash-ref 的不同键?这只是一个奇怪的数据结构,不太利于遍历(或排序)......虽然很容易处理。