1

我是 Perl 的新手,我想把它变成:

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

进入这个:

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

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

4

1 回答 1

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'

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

于 2017-02-14T16:32:52.553 回答