2012-01-26 3 views
0

複数のファイルのそれぞれに対して(よりユニークな)大きなハッシュテーブルに追加しようとしているハッシュテーブルが生成されましたが、構文に問題があり、保持しています誤って値を呼び出したり、ハッシュのハッシュを作成したりします。perl:大きなハッシュにハッシュペアを追加する

(The actual $hash key) => $hash{$key}; 

$compound_hash{$key} = $hash{$key}; 


に現在私が持っている:

if ($file_no == 0){ 
      while (my ($key, $value) = each %hash){ 
        $compound_hash{$key} = $value; 
      }  

    }else{ 
      while (my ($key, $value) = each %compound_hash){ 

        if (exists $hash{$key}){ 
          print "$key: exists\n"; 
          $compound_hash{$key} .= ",$hash{$key}"; 
        }else{ 
          print "$key added\n"; 
          XXXXXXX 
        } 

最終結果がへにハッシュ値を連結することである私がやりたいすべてがオンであります各行の末尾に.csvを作成します。つまり、

私はセットアップ %compound_hashが最初にある配列の参照、移入されるかもしれない、

for my $key (keys %hash) { # for all new keys 
    if (exists $compound_hash{$key}) { # if we have seen this key 
      $compound_hash{$key} .= ",$hash{$key}" # append it to the csv 
    } 
    else { 
      $compound_hash{$key} = $hash{$key} # otherwise create a new entry 
    } 
} 

私自身のコードでは:

 abc,0,32,45 
    def,21,43,23 
    ghi,1,49,54 

答えて

3

はこのような何かを正確に言うが、私は、あなたが探しているものを考えるのは難しいです。そのデータがいっぱいになると文字列に結合されます。

for my $key (keys %hash) { 
    push @{ $compound_hash{$key} }, $hash{$key} 
} 

し、後で繰り返し化合物のハッシュに含まれる文字列にデータを追加するよりも効率的になります

for my $value (values %compound_hash) { 
    $value = join ',' => @$value 
} 

+0

ありがとう、これは非常に役に立ちました。 – Daniel

関連する問題