Perl 数组索引到哈希值

Perl Array index to Hash value

我是 Perl 的新手,我想转这个:

$a = ["apple", "orange", "banana"];

进入这个:

$b = { "apple" => 0, "orange" => 1, "banana" => 2 };

有没有一种优雅的方法可以代替手动迭代和分配计数器?

我通常是这样做的:

my $b = {};
@$b{@$a} = 0..$#$a;

尽管对一切都使用标量引用并不是很习惯;通常,您会使用数组变量来保存数组,使用散列变量来保存散列。这将使数组分配看起来像这样:

my @a = ("apple", "orange", "banana");

或者,更简洁地说,像这样:

my @a = qw(apple orange banana);

哈希设置如下所示:

my %b;
@b{@a} = 0..$#a;

这利用了一次分配给散列中的多个键的能力:

my %h;
@h{'foo','bar'} = ('zoo','wicky');

这使得 $h{foo} 等于 'zoo' 并且 $h{bar} 等于 'wicky'

通过将数组放在左侧的卷曲内,您可以按顺序获得该数组的所有元素作为要分配的哈希键。范围表达式 0..$#a,其中 $#a 是数组最后一个元素的索引,扩展为整数列表 0,1,2,3,4,...,$#a on作业的右侧。所以每个数组值都映射到它的索引。