在perl中按特定键内的值对多维散列进行排序



提前感谢您的帮助。

我有一个名为%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中的排序。

祝你好运!

相关内容

  • 没有找到相关文章

最新更新