是否有一个相当于map
的哈希值?在Perl中的哈希映射
my %new_hash = hash_map { new_key($a) => new_val($b) } %hash;
我知道我可以通过键循环。
是否有一个相当于map
的哈希值?在Perl中的哈希映射
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
。
您可以使用地图这样的:
my $i = 0;
my %new_hash = map { $i ^= 1 ? new_key($_) : new_val($_) } %hash;
对不起,我的例子只是一个特例。我想'new_key'和'new_val'是键和值的函数。 (这回答了我问的问题,但是。) – Tim
我真的不明白你在这里要做什么。什么是“map
的哈希等价物”甚至意味着什么?你可以在散列上使用map
。如果你想要钥匙,只需使用keys
;例如,”
@msglist = map { "value of $_ is $hash{$_}" } keys %hash
虽然平时
说 “的$价值_为$哈希{$ _}” 键%哈希;
就好了
如果你想同时,然后用整个哈希。
对于分配,这有什么错%new_hash = %old_hash
?
您是否有深层复制问题?然后使用Storable::dclone
。
您是否希望在关闭时同时使用键和值?然后,让一帮对与第一地图:
@pairlist = map { [ $_ => $hash{$_} ] } keys %hash
我需要看到你想用这个做一个例子,但到目前为止,我可以看到零的原因,使用一些大的旧模块来代替基本的Perl。
$ 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'
};
正如在问题和其他答案中所看到的,我知道我可以通过键循环。我期待着看看是否有另一种解决方案。 (这是List :: Pairwise。) – Tim
我加了这个,因为我不允许向@eugene解决方案添加注释。 我喜欢它,但它并没有为我工作(在map
添加print $i
地看到,值变为NaN
) 它的工作是这样的:
my $i = 0;
%hash = map { ($i=($i^1)+0) ? new_key($_) : new_val($_) } %hash;
'名单::成对:: mapp'作品大。 – Tim