【发布时间】:2019-12-04 15:45:23
【问题描述】:
我对 perl 编程有点陌生,我有一个哈希值,可以这样表述:
$hash{"snake"}{ACB2} = [70, 120];
$hash{"snake"}{SGJK} = [183, 120];
$hash{"snake"}{KDMFS} = [1213, 120];
$hash{"snake"}{VCS2} = [21, 120];
...
$hash{"bear"}{ACB2} = [12, 87];
$hash{"bear"}{GASF} = [131, 87];
$hash{"bear"}{SDVS} = [53, 87];
...
$hash{"monkey"}{ACB2} = [70, 230];
$hash{"monkey"}{GMSD} = [234, 230];
$hash{"monkey"}{GJAS} = [521, 230];
$hash{"monkey"}{ASDA} = [134, 230];
$hash{"monkey"}{ASMD} = [700, 230];
hash的结构总结如下:
%hash{Organism}{ProteinID}=(protein_length, total_of_proteins_in_that_organism)
我想根据一些条件对该哈希进行排序。首先,我只想考虑那些蛋白质总数大于 100 的生物体,然后我想显示生物体的名称以及最大的蛋白质及其长度。
为此,我将采用以下方法:
foreach my $org (sort keys %hash) {
foreach my $prot (keys %{ $hash{$org} }) {
if ($hash{$org}{$prot}[1] > 100) {
@sortedarray = sort {$hash{$b}[0]<=>$hash{$a}[0]} keys %hash;
print $org."\n";
print @sortedarray[-1]."\n";
print $hash{$org}{$sortedarray[-1]}[0]."\n";
}
}
}
但是,它打印生物体名称的次数与蛋白质总数一样多,例如,它打印“蛇”120 次。此外,这不是正确排序,因为我想我应该在排序行中使用变量 $org 和 $prot。
最后,输出应该是这样的:
snake
"Largest protein": KDMFS [1213]
monkey
"Largest protein": ASMD [700]
【问题讨论】:
-
输出应该显示所有“总蛋白质数高于 100”,如文本所述,还是只显示最大的一个,如所需的输出示例所示?跨度>
标签: perl multidimensional-array hash protein-database perl-hash