是否有等效的哈希map
?
my %new_hash = hash_map { new_key($a) => new_val($b) } %hash;
我知道我可以遍历这些键。
是否有等效的哈希map
?
my %new_hash = hash_map { new_key($a) => new_val($b) } %hash;
我知道我可以遍历这些键。
List::Pairwise声称完全实现了该语法——参见mapp
, grepp
. 不过我没用过。
此外,你可以这样做
%new_hash = map { new_key($_) => new_value($hash{$_}) } keys %hash;
我承认如果%hash
真的是$deeply->{buried}->{hash}
. 我更喜欢$temp = ...; map {...} keys %$temp
在这种情况下使用。
我真的看不出你在这里想做什么。“等效于 ” 的哈希值map
是什么意思?你可以map
在哈希上使用就好了。如果你想要钥匙,只需使用keys
; 例如”
@msglist = map { "value of $_ is $hash{$_}" } keys %hash
虽然通常
say "value of $_ is $hash{$_}" keys %hash;
很好。
如果你想要两者,那么使用整个哈希。
对于作业,有什么问题%new_hash = %old_hash
?
你有深拷贝问题吗?然后使用Storable::dclone
.
你想同时在闭包中同时使用键和值吗?然后用第一张地图做一堆对:
@pairlist = map { [ $_ => $hash{$_} ] } keys %hash
我需要看一个你想用这个做什么的例子,但到目前为止,我可以看到零原因使用一些大的旧模块而不是基本的 Perl。
您可以像这样使用地图:
my $i = 0;
my %new_hash = map { $i ^= 1 ? new_key($_) : new_val($_) } %hash;
您可以使用mapn
我的模块List::Gen来执行此操作:
use List::Gen 'mapn';
my %new_hash = mapn {new_key($_[0]) => new_value($_[1])} 2 => %old_hash;
mapn
类似于 map,除了它需要一个额外的参数,即遍历列表的元素数量。在块内部,@_
数组被设置为当前切片。
$ perl -d /dev/null
DB<2> %p = ( a=>'b', c=> 'd');
DB<5> p Dumper \%p
$VAR1 = {
'c' => 'd',
'a' => 'b'
};
例如反转键和值:
DB<6> %q = map { ($p{$_}, $_ ) } keys %p
DB<7> p Dumper \%q
$VAR1 = {
'b' => 'a',
'd' => 'c'
};