Perl Array索引为哈希值

时间:2017-02-14 16:30:34

标签: arrays perl iteration hashref

我是Perl的新手,我想转此:

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

进入这个:

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

有没有一种优雅的方式来做这个而不是手动迭代和分配计数器?

1 个答案:

答案 0 :(得分:4)

这就是我通常这样做的方式:

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'

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