FC2ブログ
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
map をわかりやすく説明する
今回は, Perl の map に関してです。

配列の全要素に対して、処理をしたいときどうしますか?
そうです for文を使いますよね。

map も for文と同じで、配列の全要素に対して処理をしたいときに使います。
「えー! じゃあ、なんのために map なんてあるのぉ!!??」
というそこのあなた! ご説明しましょう!

覚えておかないといけないのは次の2点!!!


for は 、

配列すべての要素を処理するのに使う!!!



mapは、

配列すべての要素を処理して配列を返す!!!



いいですかぁ。
for はすべての要素を処理しますが、

配列を返しません!!!!


配列を返すか、返さないか これが大きく違うところです。
例を見てみましょう。

つぎのソースは、配列の中身をすべて+1した内容を表示しています。
use strict;

my @array = 1..10;

for(@array){
  print $_ + 1 . "\n";
}

さて、すべて+1した内容を、 @plus_ones という配列に入れたいときはfor文だと、 つぎのようになります。

use strict;

my @array = 1..10;

my @plus_ones;
for(@array){
  push @plus_ones, $_ + 1;
}

push です。 push を使ってますよぉ! 
しかも、 my @plus_ones; とか for文の上で宣言してるし!!
でも、代入してるところは、for文の中!!
代入してるところと宣言が離れてしまってます!!!
なんとまどろっこしい!!!

そこで、 map です。
map を使ってあげてください。
map は、配列を受け取って、配列を返すんです!!!
関数のように表すと @hoge = map(@foo); こんな感じに使えるヤツです。

では、すべての要素に+1した配列を受け取る方法です。
use strict;

my @array = 1..10;

my @plus_ones = map{ $_ + 1 } @array;

ほら、できた!!!!! 宣言と代入が1行で書けたよ!!!!!!
これで、すっきりわかりやすくなったね!!!!!

「えーぇ 構文がわからないよぉ」
だって??

大丈夫、つぎの書式をしっかり目に焼き付けるんだ!!!


map {処理} @配列


{ } の後ろには ,(カンマ)が要らないことに注意だ!!!
これで、@配列に{処理}を加えた配列を返してくれるんだ!!!


{処理}のところは、なにもこんな簡単な式しか書けないわけではありません。
つぎのように、 偶数は2倍、それ以外は10をプラスするというようなことも書けるわけです。
use strict;

my @array = 1..10;

my @hoge = map{
                if($_ % 2 == 0){
                   $_ * 2
                }else{
                   $_ + 10
               }
           } @array;

print $_ . "\n" for @hoge;

どうしてこれで、配列をgetできるかというと、
{処理}で行われた最後の行をmapは配列として、まとめて、返すからなんです。
偶数のときは、 $_ * 2 が最後に処理されますね。
それ以外のときは、 $_ + 10 が最後に処理されています。
スポンサーサイト
コメントを投稿する
Name:
URL:
Comment:

秘密:管理者にだけ表示を許可する
トラックバック
この記事のトラックバックURL
この記事にトラックバックする(FC2ブログユーザー)
ブログ検索

プロフィール

ビンゴ中西
Perlが好きである。
プログラミング言語のほとんどは独学。独学の過程で多くのプログラム仲間にも色々教わりました。

FC2カウンター

カレンダー

10 | 2018/11 | 12
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -

ブロとも申請フォーム

この人とブロともになる

| ホーム |
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。