Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在perl中按特定键内的值对多维哈希进行排序_Perl_Sorting_Multidimensional Array_Hash - Fatal编程技术网

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

在perl中按特定键内的值对多维哈希进行排序,perl,sorting,multidimensional-array,hash,Perl,Sorting,Multidimensional Array,Hash,提前谢谢你的帮助 我有一个名为%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

提前谢谢你的帮助

我有一个名为
%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++) {
      }
   }
for($count=0;$count<$total;$count++){
对于($pepCount=0;$pepCount<$pepcotal[$count];$pepCount++){
}
}
我也把这件事搞砸了,但没用,因为我是个笨蛋:

foreach $key (sort {$pepHash{$b} <=> $pepHash{$a}} keys(%pepHash)) {
   #CONFUSED
}
foreach$键(排序{$pepHash{$b}$pepHash{$a}}键(%pepHash)){
#迷茫
}

编辑:这对我帮助很大:

要存储这样的数据结构,可以使用散列。下面是一个例子:

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";
}
foreach$键(排序{$pepHash{$b}->{Score}$pepHash{$a}->{Score}}键(%pepHash)){
my$data=$pepHash{$key};
打印“$key:Score-$data->{Score},Count-$data->{Score}\n”;
}
您可能还想阅读,以便更好地使用Perl数据结构,并了解有关Perl排序的更多信息


祝你好运

谢谢你的建议。但我仍在努力解决这个问题。这似乎是构造哈希的最有效方法:
$pepHash[$count][$pepCount]={$PEP\u SCORE=>$somevar,$PEP\u MR=>$somevar}