我从这篇文章https://stackoverflow.com/a/16157433/3880362中获取灵感。它没有做的唯一事情就是在填充每个键时增加它们的值。即。
我有:
$Hash => {
'Val1' => 1,
'Val2' => 1,
'Val3' => 1
};
我想要的时候
$Hash => {
'Val1' => 0,
'Val2' => 1,
'Val3' => 2
};
代码:
$Hash{$_}++ for (@line);
答案 0 :(得分:2)
根据另一个问题,您的输入为%hash
,输出为$hash{$array[$_]} = $_ for (0 .. $#array);
,其中哈希值在数组中哈希键的数组中偏移。如果是这样,我想你想要这个:
/static/
答案 1 :(得分:1)
您可以迭代数组索引并使用它们来填充哈希值。 Perl数组从索引0
开始。数组@foo
的最后一个索引是$#foo
。因此,您可以使用范围运算符..
将所有索引作为0..$#foo
。
#!/usr/bin/env perl
use warnings;
use strict;
use Data::Dumper;
$Data::Dumper::Sortkeys++;
my @letters = 'a'..'g';
my %hash = map { $letters[ $_ ] => $_ } 0..$#letters;
print Dumper(\%hash);
<强>输出强>
$VAR1 = {
'a' => 0,
'b' => 1,
'c' => 2,
'd' => 3,
'e' => 4,
'f' => 5,
'g' => 6
};
答案 2 :(得分:0)
我认为您希望将数组@line
的所有元素转换为散列%hash
的散列键,其哈希值从0开始。在那种情况下:
use Data::Dumper;
my @line = qw( Val1 Val2 Val3 );
my %hash;
my $n = 0;
$hash{$_} = $n++ for(@line);
print Dumper(\%hash), "\n";
请注意,Dumper
将转储所有散列键及其值,但不会按照它们的创建顺序转储。