2011-10-22 83 views
0

在此先感謝您的幫助。按特定鍵值對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 

首先,我不是很好的數據結構,所以就多d哈希任何更好的建議將是很好。

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

回答

2

要存儲這樣的數據結構,您可以使用散列哈希值。這裏的例子:

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排序。

祝你好運!

+0

感謝您的意見。但我仍然在解決這個問題。這似乎是構建我的哈希最有效的方法:'$ pepHash [$ count] [$ pepCount] = {$ PEP_SCORE => $ somevar,$ PEP_MR => $ somevar};' – Veltros