获取重复元素的所有相应键

时间:2011-03-01 17:58:22

标签: arrays perl duplicates

我有一个包含以下内容的文件:

A  1
A  2
B  3
B  4
B  5
B  6
C  7
A  8  

我想在第一列中获取所有唯一键,但是获取该唯一键的所有相应值,即我需要获取:

A 1,2,8
B 3,4,5,6
C 7

最好的方法是什么?
(我听说Perl有很好的支持来解决这个问题,但我是Perl的新手。)

3 个答案:

答案 0 :(得分:8)

试试这个:

open my $fh, '<', "data_filename";
my %map;

while(my $line = <$fh>) {
  my ($key, $val) = split(/\s+/, $line);
  push @{$map{$key}}, $val;
}

答案 1 :(得分:3)

您可能需要散列,其中散列中的每个值都是数组reference

my %values;
while (<>) {
    my ($left, $right) = split(/ /,$_,2);
    my $array = $values{$left};
    if (!$array) {
        $array = [];
        $values{$left} = $array;
    }
    push(@{$array},$right);
}

您可以使用Data::Dumper验证这是否产生了正确的数据结构:

use Data::Dumper;
print Dumper(\%values);

答案 2 :(得分:0)

为了完整起见,这只是另一种可能的解决方案。在这种情况下,哈希存储密钥和包含您的值的字符串。


use warnings;
use strict;

my %hash = ();
open (FILE, "input.txt") or die "";
while(FILE>){
chomp;
(my $key, my $value) = split;
    $value = ",".$value if exists $hash{$key};
    $hash{$key}.= $value;
}

foreach my $key (sort keys %hash){
    print "$key $hash{$key}\n";
}

与往常一样,实现目标的方法不止一种。