2012-09-17 113 views
1

說我要進行排序陣列由另一哈希查找攀比散列(%hash)(%comparator):排序查找在Perl在另一個哈希比較陣列的哈希

我想下面會工作,但它沒有。

for ($bin_ix=1; $bin_ix<scalar(keys(%cluster_bins)); $bin_ix++) {  
    $hash{$bin_ix} = sort {$comparator{$a} <=> $comparator{$b} $hash{$bin_ix}}; 
} 

它與抱怨:Missing operator before %hash。我錯過了什麼?

+2

您可能會考慮對for循環使用更簡單的語法:'爲我的$ bin_ix(1 ... keys%cluster_bins)'。 – TLP

回答

4

其實,它說

Scalar found where operator expected at -e line 2, near "} $hash" 
     (Missing operator before $hash?) 

它抱怨你放錯了地方},但有一個第二個問題:$hash{$bin_ix}僅僅是對數組的引用,而不是一個數組。你想

@{ $hash{$bin_ix} } = 
    sort { $comparator{$a} <=> $comparator{$b} } 
     @{ $hash{$bin_ix} }; 
2

池上已經回答了你直接的問題,但我想指出的是,如果你確實想所有陣列中%hash,寫你的循環將是一個更簡單的方法排序:

foreach my $array (values %hash) { 
    @$array = sort { $comparator{$a} <=> $comparator{$b} } @$array; 
} 

即使你真的只是想的鑰匙從1scalar keys %cluster_bins數組排序,TLP的建議仍然是清潔:

foreach my $bin_idx (1 .. keys %cluster_bins) { 
    my $array = $hash{ $bin_idx }; 
    @$array = sort { $comparator{$a} <=> $comparator{$b} } @$array; 
}