【问题标题】:Sorting multidimensional hashes in perl by value within a specific key在 perl 中按特定键中的值对多维散列进行排序
【发布时间】:2011-12-13 08:03:12
【问题描述】:

提前感谢您的帮助。

我有一个名为 %pepHash 的数组,每个 $count 有 174 个“计数”和多个“肽”。 这是哈希的 sn-p:

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

【问题讨论】:

    标签: perl sorting multidimensional-array hash


    【解决方案1】:

    要存储此类数据结构,您可以使用散列的散列。示例如下:

    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 documentation 以更好地了解 Perl 数据结构和 perldoc -f sort 以了解有关在 Perl 中排序的更多信息。

    祝你好运!

    【讨论】:

    • 感谢您的建议。但我仍在努力解决这个问题。这似乎是构造我的哈希的最有效方法:$pepHash[$count][$pepCount] = {$PEP_SCORE =&gt; $somevar, $PEP_MR =&gt; $somevar};
    猜你喜欢
    • 2010-10-19
    • 2014-11-07
    • 1970-01-01
    • 2014-05-07
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 2018-03-03
    相关资源
    最近更新 更多