perl - 如何删除重复值并创建新的 perl 哈希?

标签 perl hash perl-data-structures

my %hash1 = ( 
               a=>192.168.0.1,
               b=>192.168.0.1,
               c=>192.168.2.2,
               d=>192.168.2.3,
               e=>192.168.3.4,
               f=>192.168.3.4
            );

我有一个上面给出的 perl 哈希。键是设备名称,值是 IP 地址。如何使用 %hash1 创建没有重复 IP 地址(如 %hash2)的哈希? (相同ip的设备被删除)

my %hash2 = ( c=>192.168.2.2, d=>192.168.2.3 );

最佳答案

首先你需要引用你的IP地址,因为192.168.0.1在perl中是V-String,意思是chr(192).chr(168).chr(0) .chr(1).
我的变种是:

my %t;
$t{$_}++ for values %hash1; #count values
my @keys = grep
               { $t{ $hash1{ $_ } } == 1 }
           keys %hash1; #find keys for slice
my %hash2;
@hash2{ @keys } = @hash1{ @keys }; #hash slice

关于perl - 如何删除重复值并创建新的 perl 哈希?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19677331/

相关文章:

string - DateTime 对象和 YYYY-MM-DD 字符串之间的 MongoDB 区别

regex - 如何删除中间带点的首字母?

database - 关于哈希盐的综合信息

c - 由于 printf 不起作用,如何查看 char * 的内容?

c - 关于哈希函数

perl - 令人困惑的 Perl 数组行为

perl - 来自 HTTP POST 操作的错误代码 302

perl - Perl 中的内存管理

multithreading - 如何使用 Perl 并发处理部分任务?

arrays - 根据第二个数组的元素对数组进行排序