我从这篇文章https://stackoverflow.com/a/16157433/3880362中获取灵感。它没有做的唯一事情就是在填充每个键时增加它们的值。即
我有:
$Hash => {
'Val1' => 1,
'Val2' => 1,
'Val3' => 1
};
当我想要的时候
$Hash => {
'Val1' => 0,
'Val2' => 1,
'Val3' => 2
};
码:
$Hash{$_}++ for (@line);
基于另一个问题,您的输入是@array
,输出是%hash
,其中散列的值在数组中散列键的数组中偏移。如果是这样,我想你想要这个:
$hash{$array[$_]} = $_ for (0 .. $#array);
您可以迭代数组索引并使用它们填充哈希值。 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
};
我认为你想将数组@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
将转储所有哈希键及其值,但不会按其创建的顺序转储。