在Perl中散列哈希的地图

Tim*_*Tim 15 perl hash higher-order-functions

是否有哈希等价物map

my %new_hash = hash_map { new_key($a) => new_val($b) } %hash;
Run Code Online (Sandbox Code Playgroud)

我知道我可以循环通过键.

Dal*_*aen 16

List :: Pairwise声称完全实现了这种语法 - 参见mapp,grepp.我没有用它.

此外,你可以这样做

%new_hash = map { new_key($_) => new_value($hash{$_}) } keys %hash; 
Run Code Online (Sandbox Code Playgroud)

我承认,如果%hash真的是一个笨拙的话$deeply->{buried}->{hash}.我喜欢$temp = ...; map {...} keys %$temp在这种情况下使用.


tch*_*ist 8

我真的看不出你在这里想做什么.什么"哈希等价物map"甚至意味着什么?你可以使用map哈希就好了.如果你想要钥匙,只需使用keys; 例如"

@msglist = map { "value of $_ is $hash{$_}" } keys %hash    
Run Code Online (Sandbox Code Playgroud)

虽然通常

说"$ _的值是$ hash {$ _}"键%hash;

很好.

如果你想要两者,那么使用整个哈希.

对于作业,有什么问题%new_hash = %old_hash

你有深层次的问题吗?然后用Storable::dclone.

您是否希望在闭包中同时提供键和值?然后用第一张地图制作一堆对:

@pairlist = map { [ $_ => $hash{$_} ] } keys %hash  
Run Code Online (Sandbox Code Playgroud)

我需要看一个你想要用它做什么的例子,但到目前为止,我看到使用一些大的旧模块而不是基本的Perl的零原因.


Eug*_*ash 6

你可以使用这样的地图:

my $i = 0;
my %new_hash = map { $i ^= 1 ? new_key($_) : new_val($_) } %hash;
Run Code Online (Sandbox Code Playgroud)