我正在尝试从两个长度相同的数组创建一个哈希值。第一个数组的元素将是“键”,第二个数组的元素将是值。
我尝试了以下代码:FYI:数组“vss”表示虚拟服务器名称,“vsports”表示tcp端口。
my %vsnhash;
@vsnhash {@vss} = @vsports;
print Dumper(\%vsnhash);
只要第一个数组中的所有元素(名称)都是唯一的,这对我有用。如果不是,则由于重复的密钥,我无法访问散列中的所有keys =>值。
如何为哈希创建一个额外的唯一“级别”或“密钥”,我可以用它来引用具有重复名称(或“密钥”)的数据?
任何建议或替代解决方案都会非常有用。 谢谢
答案 0 :(得分:4)
for (my $i = 0; $i < @vss; $i++) {
push (@{$vsnhash->{$vss[$i]}}, $vsports[$i]);
}
然后将每个哈希键作为数组访问。数组将是键引用数量的大小。这里有一些例子:Perl data structure traversal -- reference followed key
答案 1 :(得分:1)
您还可以使用each_array
from List::MoreUtils
:
#!/usr/bin/env perl
use strict; use warnings;
use List::MoreUtils qw( each_array );
my @k = qw(a a b c d d e e f);
my @v = qw(1 2 3 4 5 6 7 8 9);
my %h;
my $it = each_array(@k, @v);
while (my ($k, $v) = $it->()) {
push @{ $h{ $k } }, $v;
}
use YAML;
print Dump \%h;
输出:
--- a: - 1 - 2 b: - 3 c: - 4 d: - 5 - 6 e: - 7 - 8 f: - 9