perl:将哈希对添加到更大的哈希

时间:2012-01-26 22:12:29

标签: perl syntax csv hash

我生成了一个哈希表,然后我尝试为多个文件中的每个文件添加一个更大的哈希表(如果是唯一的),但是我遇到了语法问题并且不小心调用了值或者创建了一个哈希值哈希值。我想做的就是转:

(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即

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

1 个答案:

答案 0 :(得分:3)

很难确切地说出来,但我认为你要找的是这样的:

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
     }
}

在我自己的代码中,我可能会设置%compound_hash最初使用数组引用进行填充,然后在数据填充后将其连接到字符串。

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

然后再

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

这比将数据重复附加到复合哈希中包含的字符串更有效。