假设我有哈希数据结构的哈希构造如下:
%HoH => (
flintstones => {
family_members => "fred;wilma;pebbles;dino",
number_of_members => 4,
},
jetsons => {
family_members => "george;jane;elroy",
number_of_members => 3,
},
simpsons => {
family_members => "homer;marge;bart;lisa;maggie",
number_of_members => 5,
},
)
Run Code Online (Sandbox Code Playgroud)
如何根据number_of_members从最大到最小的值对键(本例中的族)进行排序?然后我想打印出最高的两个.这是一个大致的想法,但我知道这是错的:
foreach $value (
sort {
$HoH{$a}{$number_of_members} cmp $HoH{$b}{$number_of_members}
} keys %HoH)
my $count = 0;
while ($key, $value) = each %HoH) {
if (count <= 2){
print "${HoH}{$key}\t$key{$value}";
}
}
continue {
$count++;
};
Run Code Online (Sandbox Code Playgroud)
我想要打印代码(空格是制表符分隔):
simpsons homer;marge;bart;lisa;maggie
flintstones fred;wilma;pebbles;dino
Run Code Online (Sandbox Code Playgroud) 我对 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];
Run Code Online (Sandbox Code Playgroud)
哈希的结构总结如下:
%hash{Organism}{ProteinID}=(protein_length, total_of_proteins_in_that_organism)
Run Code Online (Sandbox Code Playgroud)
我想根据某些条件对这个哈希进行排序。首先,我只想考虑那些蛋白质总数大于100的生物,然后我想显示生物的名称以及最大的蛋白质及其长度。
为此,我将采用以下方法:
foreach my $org (sort keys %hash) {
foreach my $prot (keys %{ $hash{$org} }) {
if ($hash{$org}{$prot}[1] > 100) {
@sortedarray = …Run Code Online (Sandbox Code Playgroud)