勉強日記スマートフォン用の表示で見る勉強日記この広告は、90日以上更新していないブログに表示しています。配列の合計や最小要素を簡単に求められるんだけど、慣れていないと理解しにくい。そこで、できるだけわかりやすく説明したいと思う。injectの使用例Ruby初心者が配列の和を求めたいと思ったとき、最初に思いつくのは以下のようなコードだろう。15変数sumを用意し、eachで配列の中身を順にsumに足していく。Rubyを知っている人なら誰でも理解できると思う。これをinjectを使って次のように書ける。15簡潔だが、injectを知らないといまいちピンとこないのではないだろうか。ちなみに、Ruby1.8.7以降であれば更に簡単に書ける。15こちらの方がわかりやすいかもしれない。どちらも原理は簡単だ。injectの原理Cなどの言語をやったことがあれば、以下の2つが等価だと聞いたことはあるだろう。文}式1が初期化、式2が継続条件、式3が再初期化となる。eachとinjectの関係は、このwhileとforの関係に似ている。上で例として上げた配列の和を求める3つのコードが等価なのだ。injectにはいくつかの書き方が存在し、その基本となるのがこれ。}これは以下のコードと同じである。「...」の部分に書けばいいということがわかるのではないだろうか。item」と書けるので、最初の2つの例が等価という意味もわかってもらえるだろう。injectの他の書き方3つ目の例ではinjectに演算子のシンボルだけを渡している。このように、injectにはいくつか書き方がある。初期値を省略した場合。}これは、初期値として配列の先頭の値が代入され、2回目のループから開始されると考えればいい。次に、ブロックなしで演算子のシンボルと初期値をinjectの引数に与えた場合。演算子これは以下と等価になる。itemendそしてもう一つが、3つ目の例で挙げた、演算子のシンボルのみをinjectの引数に与えた場合。initとして配列の先頭の値が代入され、2回目のループから開始されたときと同じになる。覚えておいて損はないだろう。文字列の長さの最小値、最大値や合計を求める例えば、配列に入ってる文字列の中で一番長い文字列の長さがほしい場合、injectを使えばこのように書ける。5一応、これは下のようにも書ける。5ブロックに更にlengthメソッドをつけるのが気持ち悪いので個人的にはinjectが好みだが、まあこの辺は人によるだろうか。文字列の長さの合計もinjectで一発だ。19フィボナッチ数列を求めるかの有名なフィボナッチ数列もinjectで書ける。21]このように、resultに配列やハッシュを使うと応用範囲がかなり広がる。まとめ以上、injectメソッドについていろいろ説明してみた。わかりやすい説明ではなかったように思うが、とりあえずfor文が使えたらinjectも使えるはずだということだけは言っておきたかった。今までinjectを知らなかったり、知っていてもわかりにくいという理由で使っていなかった人も、これからは積極的にinjectを使うことをオススメする。理系の人はそろそろ卒論・修論を執筆する時期ですね。作った月別アーカイブ参加グループプログラミングリンクはてなブログブログをはじめる週刊はてなブログはてなブログProはてなブログをはじめよう!akisute3さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。