Translate

2012年4月8日日曜日

配列からハッシュを作る

■ハッシュ
・2つの配列(キー用の配列,値用の配列)からハッシュを作る
⇒ハッシュのスライスを使う

#!/usr/bin/perl
use feature 'say';
use strict;
use warnings;
use utf8;
use Encode;

my @k = qw/k1 k2 k3/;
my @v = qw/v1 v2 v3/;
my %h = ();
@h{@k} = @v; #ハッシュのスライス

for my $key (sort keys %h){
  say encode_utf8("key:". $key. " value:". $h{$key});
}
実行結果
key:k1 value:v1
key:k2 value:v2
key:k3 value:v3

上記では、空のハッシュに対し、ハッシュのスライスをおこなってみた。
今度は、値が入っているハッシュに対し、ハッシュのスライスを行い
配列データを配列に格納してみる。
#!/usr/bin/perl
use feature 'say';
use strict;
use warnings;
use utf8;
use Encode;

my @k = qw/k1 k2 k3/;
my @v = qw/v1 v2 v3/;
my %h = ("k0" => "v0", "k1" => "dummy");
@h{@k} = @v; #ハッシュのスライス

for my $key (sort keys %h){
  say encode_utf8("key:". $key. " value:". $h{$key});
}

実行結果
key:k0 value:v0
key:k1 value:v1
key:k2 value:v2
key:k3 value:v3


・配列(一つ)からハッシュを作る。
(存在するかどうかを知るためにハッシュ化するだけで値は意味のある値を必要としないとする)
#!/usr/bin/perl
use feature 'say';
use strict;
use warnings;
use utf8;
use Encode;

my @k = qw/k1 k2 k3/;
my %h = ();
@h{@k} = 1..@k; #ハッシュのスライス

for my $key (sort keys %h){
  say encode_utf8("key:". $key. " value:". $h{$key});
}

実行結果
key:k1 value:1
key:k2 value:2
key:k3 value:3


でも…map関数を使えばもっと綺麗に。
#!/usr/bin/perl
use feature 'say';
use strict;
use warnings;
use utf8;
use Encode;

my @k = qw/k1 k2 k3/;
my %h = map{($_, 1)} @k;

for my $key (sort keys %h){
  say encode_utf8("key:". $key. " value:". $h{$key});
}

0 件のコメント:

コメントを投稿