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作业的右侧。所以每个数组值都映射到它的索引。
我是 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作业的右侧。所以每个数组值都映射到它的索引。