我是Perl的新手,我想转此:
$a = ["apple", "orange", "banana"];
进入这个:
$b = { "apple" => 0, "orange" => 1, "banana" => 2 };
有没有一种优雅的方式来做这个而不是手动迭代和分配计数器?
答案 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任务的右侧。所以每个数组值都映射到它的索引。