1

別のハッシュ ( )%hashで比較を検索して、配列のハッシュ ( ) を並べ替えたいとします。%comparator

以下はうまくいくと思いましたが、うまくいきませんでした。

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。私は何が欠けていますか?

4

2 に答える 2

4

実際、それは言う

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

それはあなたの間違った場所について不平を言っています}が、2番目の問題があります$hash{$bin_ix}。あなたがしたい

@{ $hash{$bin_ix} } =
   sort { $comparator{$a} <=> $comparator{$b} }
      @{ $hash{$bin_ix} };
于 2012-09-17T18:36:19.653 に答える
2

池上はすでにあなたの直接の質問に答えていますが、実際に のすべての配列を並べ替えたい場合は%hash、ループを記述するより簡単な方法は次のようになります。

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

1キーの配列を からまでソートしたい場合でもscalar keys %cluster_bins、TLP の提案はよりクリーンになります。

foreach my $bin_idx ( 1 .. keys %cluster_bins ) {
    my $array = $hash{ $bin_idx };
    @$array = sort { $comparator{$a} <=> $comparator{$b} } @$array;
}
于 2012-09-17T19:05:52.993 に答える