1

私は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{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"; 
            }
        }
    }

ただし、これは生物の名前をタンパク質の総数と同じ数だけ出力します。たとえば、「snake」を 120 回出力します。その上、ソート行で変数 $org と $prot を使用する必要があると思うので、これは適切にソートされていません。

最終的に、出力は次のようになります。

snake
"Largest protein": KDMFS [1213]

monkey
"Largest protein": ASMD [700]
4

4 に答える 4