【问题标题】:perl: add hash pair to larger hashperl:将散列对添加到更大的散列
【发布时间】:2012-02-20 00:32:47
【问题描述】:

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

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

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

【问题讨论】:

    标签: perl syntax csv hash


    【解决方案1】:

    很难确切地说出来,但我认为您正在寻找的是这样的:

    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
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-04
      • 1970-01-01
      • 2011-03-13
      • 2016-07-18
      • 2013-03-14
      • 2019-01-13
      • 1970-01-01
      • 2015-07-17
      相关资源
      最近更新 更多