perlの復習(map)
なぜかたいていはfor文とか使ってしまう
mapとかも使えたほうがイケてる感じがするので調べ直さないと…
map
配列の一覧を返す機能、値に加工などを行うことも可能
書式
map { なんかの処理 } 配列;
※{}で挟まれた部分でなんかの処理を行う
※セミコロンを忘れないようにしないと
例1
#!/usr/bin/env perl use strict; use warnings; my $list = [111, 222, 333, 444, 555]; print "map sample\n"; map { print $_ . "\n"; } @{$list};
↓
$ perl sample1.pl map sample 111 222 333 444 555 $
※単純に値を出力するサンプル
例2
#!/usr/bin/env perl use strict; use warnings; use Data::Dumper; my $list = [111, 222, 333, 444, 555]; print "map sample\n"; my @list2 = map { "[" . $_ . "]"; } @{$list}; # あえてリファレンスで渡すとかわけわからんことしているような… print Dumper(\@list2);
↓
$ perl sample1.pl map sample $VAR1 = [ '[111]', '[222]', '[333]', '[444]', '[555]' ]; $
※配列に値を返す場合は%を指定することをわすれないようにしないといけない
例3
#!/usr/bin/env perl use strict; use warnings; use Data::Dumper; my $list = [111, 222, 333, 444, 555, 111, 333]; print "map sample\n"; my %list2 = map { $_ => "" } @{$list}; # あえてリファレンスで渡すとかわけわからんことしているような… print Dumper(\%list2);
↓
$ perl sample1.pl map sample $VAR1 = { '444' => '', '555' => '', '111' => '', '333' => '', '222' => '' }; $
※なんかちょっと強引だけどハッシュ化することで重複キーを除去とかもできるかもしれない
grepは?
今回はやりませんでした。
私は普通の人より理解が遅いので1つずつやっていかないと混乱してしまう(´・ω・`)
一応こんな感じ
#!/usr/bin/env perl use strict; use warnings; use Data::Dumper; my $list = [111, 222, 333, 444, 555]; print "map sample\n"; my @list2 = grep { if($_ % 2 == 0){ $_ } } @{$list}; # あえてリファレンスで渡すとかわけわからんことしているような… print Dumper(\@list2);
↓
$ perl sample3.pl map sample $VAR1 = [ 222, 444 ]; $
所感
1行で書くのが普通みたいだけどなんか他の情報がまざると間違いやすくなるのでブロック構文のように複数の行にしています。
何度も書けば慣れていくかも…
使いドコロを間違えないようにしないと