Perl 哈希值 : how to deal with duplicate keys and get possible pair

标签 perl hash perl-module

我有这样的对(数据排序为 %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 key 哈希重复

我需要添加重复项(我可以使用数组,但大数据系统运行缓慢)

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

如果 $input='G2'
获取输出 G2->(G3,D3,G1)
如果 $input='D2'
获取输出 D2->(D1,D3)

最佳答案

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

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

这会让你:
$VAR1 = {
          'G1' => [
                    'G2'
                  ],
          'G2' => [
                    'G3',
                    'D3'
                  ]
        };

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

关于Perl 哈希值 : how to deal with duplicate keys and get possible pair,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17216007/

相关文章:

perl - 如何处理 Perl Web 应用程序中无效的 UTF-8 字符?

asp.net - 如何在 Asp.Net 身份 2 中手动检查密码?

perl - 我应该如何处理 Perl 模块内部或外部的错误?

linux - Perl - 伪哈希已被弃用

perl - 在 Windows 中手动安装 Perl 模块

macos - 使用 Perl 在 Mac OS 上读取实际文件创建日期

windows - 通过 Cygwin 通过 "Windows Command"启动 Perl 脚本

sql - SQL中二进制字符串的汉明距离

mysql - 用于登录数据库并进行简单查询的 Perl 模块?

javascript - 如何使用 JavaScript 有选择地将用户输入存储在 HashMap 中