4

我有这样的配对(数据排序为 %hash 格式(我有大数据))
G1-G2
G2-G3
D1-D2
D3-D2
G3-D3
G2-D3

Perl 脚本

    use strict;
    use warnings;
    use Data::Dumper;
    my %hash;
    $hash{'G1'}='G2';
    $hash{'G2'}='G3';
    $hash{'D1'}='D2';
    $hash{'D3'}='D2';
    $hash{'G3'}='D3';
    $hash{'G2'}='D3';

    print Dumper \%hash;

输出
$VAR1 = { 'G1' => 'G2', 'G2' => 'D3', 'D3' => 'D2', 'G3' => 'D3', 'D1' => 'D2' };

这里缺少 G2-G3 bcz 密钥哈希重复
我需要添加重复项(我可以使用数组但大型数据系统运行缓慢)

任何快速方法添加对并获取可能对的条件输入

If $input='G2'<br> Get output G2->(G3,D3,G1)

If $input='D2'<br> Get output D2->( D1,D3)

4

3 回答 3

9

您是正确的,给定的哈希键只能有一个值。但是,该值可以是一个数组,在您的情况下,这听起来就是您所需要的。所以像:

my %hash;
push @{$hash{G1}}, 'G2';
push @{$hash{G2}}, 'G3';
...
push @{$hash{G2}}, 'D3';

这会让你:

$VAR1 = {
          'G1' => [
                    'G2'
                  ],
          'G2' => [
                    'G3',
                    'D3'
                  ]
        };

这个方法利用了 Perl 的autovivification,所以我们不需要在附加之前检查哈希键是否存在。

于 2013-06-20T14:25:56.330 回答
1

我认为按照 levengli 和 ldx.a.ldy.c 的答案中的建议构建小数组是您的最佳选择。

或者,您可以只使用Hash::MultiValue

于 2013-06-20T14:28:55.377 回答
1

支持哈希中的多个条目的最佳方法是使用数组引用作为值。在你的情况下,这意味着

$hash{'G1'}=['G2'];
$hash{'G2'}=['G3', 'D3'];
$hash{'D1'}=['D2'];
$hash{'D3'}=['D2'];
$hash{'G3'}=['D3'];
于 2013-06-20T14:20:35.773 回答