tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

mapとgrepとforeach

最近はperlやってるけど
何度やってもいまいちとっつきにくいmapとgrepについてメモメモ

特徴
・なんらかのリストに対して要素を順番に処理したリストを返す
・なんらかのリストから取り出した値を変えると、元のリストの要素も書き換わる
・map(grep)関数内では、リストから取り出した値を局所的に$_にセットする

と、書いたものの実際に試した感じをメモ

まずは普通にforeachでループ

my @array = ( 1, 2, 3, 4, 7 );
foreach my $val (@array){
	print "$val\n";
}
出力結果
1
2
3
4
7

。。。まぁ、そりゃそうだね

次にmap

# @arrayの各要素を2倍したリストを返却
my @array = ( 1, 2, 3, 4, 7 );
# 書き方1
my @ret   = map{
  $_ * 2;
} @array;
# 書き方2
my @array = ( 1, 2, 3, 4, 7 );
my @ret   = map{ $_ * 2 } @array;
# 書き方3
my @array = ( 1, 2, 3, 4, 7 );
my @ret   = map $_ * 2 ,@array;
@retの出力結果
2
4
6
8
14

次にgrep

# @arrayの各要素のうち偶数のものを返却
my @array = ( 1, 2, 3, 4, 7 );
# 書き方1
my @ret   = grep{
  $_ % 2 == 0;
}@array;
@retの出力結果
2
4

@retを$retで受け取ると該当するリストの個数を返してくれるみたい

とりあえずのメモで