我有一个这样的数组:
my @arr = ("Field3","Field1","Field2","Field5","Field4");
现在我使用下面的地图,其中 / DOSOMETHING / 是我正在寻找的答案。
my %hash = map {$_ => **/DOSOMETHING/** } @arr
现在我要求哈希看起来如下:
Field3 => 0 Field1 => 1 Field2 => 2 Field5 => 3 Field4 => 4
任何帮助?
答案 0 :(得分:24)
%hash = map { $arr[$_] => $_ } 0..$#arr;
print Dumper(\%hash)
$VAR1 = {
'Field4' => 4,
'Field2' => 2,
'Field5' => 3,
'Field1' => 1,
'Field3' => 0
};
答案 1 :(得分:19)
my %hash;
@hash{@arr} = 0..$#arr;
答案 2 :(得分:3)
这是我能想到实现这个目标的另一种方式:
sub get_bumper {
my $i = 0;
sub { $i++ };
}
my $bump = get_bumper; # $bump is a closure with its very own counter
map { $_ => $bump->(); } @arr;
与你在
答案 3 :(得分:2)
在Perl 5.12及更高版本中,您可以在数组上使用each
来迭代其索引/值对:
use 5.012;
my %hash;
while(my ($index, $value) = each @arr) {
$hash{$value} = $index;
}