に相当するハッシュはあり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
マップに似ていますが、リストをウォークスルーする要素の数という追加の引数が必要になる点が異なります。ブロック内では、@_
配列は現在のスライスに設定されます。
$ 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'
};