提前感谢您的帮助。
我有一个名为%pepHash
的数组,每个$count
中有174个"计数"和多个"肽"。下面是哈希的一个片段:
Count: 39 Peptide: 0 Score: 55.03 MR: 1792.3206
Count: 39 Peptide: 1 Score: 75.22 MR: 1792.6158
Count: 39 Peptide: 2 Score: 62.63 MR: 1972.7156
Count: 39 Peptide: 3 Score: 49.95 MR: 2365.2174
Count: 40 Peptide: 0 Score: 46.38 MR: 1256.4437
Count: 40 Peptide: 1 Score: 71.07 MR: 1950.1644
Count: 40 Peptide: 2 Score: 71.77 MR: 2492.9394
Count: 40 Peptide: 3 Score: 67.28 MR: 2493.0154
首先,我不太擅长数据结构,所以任何关于多维哈希的更好的建议都会很好。
Count: 40 Peptide: 1 Score: 71.07 MR: 1950.1644
被$pepHash[$count][$pepCount]{$PEP_SCORE}
或{$PEP_MR}
访问,在这种情况下显然是$pepHash[40][1]{$PEP_SCORE}
。我想按分数降序对所有%pepHash
进行排序,或者创建一个新的排序散列,这样列表就变成:
Count: 39 Peptide: 0 Score: 75.22 MR: 1792.6158
Count: 39 Peptide: 1 Score: 62.63 MR: 1972.7156
Count: 39 Peptide: 2 Score: 55.03 MR: 1792.3206
Count: 39 Peptide: 3 Score: 49.95 MR: 2365.2174
Count: 40 Peptide: 0 Score: 71.77 MR: 2492.9394
Count: 40 Peptide: 1 Score: 71.07 MR: 1950.1644
Count: 40 Peptide: 2 Score: 67.28 MR: 2493.0154
Count: 40 Peptide: 3 Score: 46.38 MR: 1256.4437
注意更新的$pepCount
值。我有这样一个循环可以使用:
for ($count = 0; $count < $total; $count++) {
for ($pepCount = 0; $pepCount < $pepTotal[$count]; $pepCount++) {
}
}
我也在摆弄这个,但无济于事,因为我是一个新手:
foreach $key (sort {$pepHash{$b} <=> $pepHash{$a}} keys(%pepHash)) {
#CONFUSED
}
编辑:这对我帮助很大:http://www.stathis.co.uk/computers/perl-sort-tutorial
要存储这样的数据结构,您可以使用哈希的哈希。这里的例子:
my %pepHash;
$pepHash{someKey} = { Score => 100, Count => 42 };
$pepHash{someOtherKey} = { Score => 200, Count => 43 };
# ...
然后排序这个散列:
foreach $key (sort {$pepHash{$b}->{Score} <=> $pepHash{$a}->{Score}} keys(%pepHash)) {
my $data = $pepHash{$key};
print "$key: Score - $data->{Score}, Count - $data->{Score}n";
}
您可能还需要阅读Perl文档,以更好地了解Perl数据结构和perldoc -f sort,以了解更多关于Perl中的排序。
祝你好运!