はじめてのRuby!collectメソッドでブロックの戻り値を取得する

collectメソッドを使用すると、配列の要素ごとにブロックの処理結果を取得できるので便利です。

「配列の要素ごとの演算結果を別の配列で取得したい」
「collectメソッドの使い方がいまいちわからない」

そんな方に向けて、ここでは以下の内容を解説していきます!


【基礎】collectメソッドとは
【基礎】collectメソッドの使い方
【基礎】collect!メソッドの使い方
【発展】範囲オブジェクトでcollectメソッドを使う方法

この記事ではcollectメソッドについてわかりやすく解説していますので、ぜひ参考にしてください。

目次

collectメソッドとは

collectメソッドは一言で言うと「ブロックの結果を配列として返す」ためのものです。

そのため、配列の要素ごとに演算結果を取得したい場合などに、for文などの繰り返し処理を使わずに済むので非常に便利なメソッドです。

collectメソッドの書き方:

オブジェクト.collect {|item| block }
オブジェクト.collect! {|item| block }

オブジェクトには配列や範囲オブジェクトを指定します。

ブロックの引数itemには各要素が格納されます。

blockの処理結果を要素ごとに配列として返します。

「!」を指定した破壊的メソッドを使用することもできます。

また、mapメソッドはcollectメソッドの別名のため、同じ処理が可能です。

collectメソッドの基本

ここではcollectメソッドの基本的な使い方について、見ていきましょう。

collectメソッドの使い方

以下ではcollectメソッドを使用して、配列の値をブロックの処理で演算して結果を配列として返すプログラムです。

array = [1, 2, 3, 4, 5, 6, 7, 8, 9]
p array.collect { |item| item * 3 }

実行結果:

[3, 6, 9, 12, 15, 18, 21, 24, 27]

ブロックの処理で実施される「item * 3」の処理が、要素ごとに結果として配列で返されていることがわかりますね!

以下では配列の要素ごとにupcaseメソッドを使用して、文字列を大文字に変換しています。

fruits = ["apple", "orange", "melon", "banana", "pineapple"]
p fruits.collect { |item| item.upcase }

実行結果:

["APPLE", "ORANGE", "MELON", "BANANA", "PINEAPPLE"]

collect!メソッドの使い方

collectメソッドは破壊的メソッドであるcollect!を使用することができます。

破壊的メソッドを使用すると、元の配列自身の内容が変更されます。

array = [1, 2, 3, 4, 5, 6, 7, 8, 9]
array.collect! { |item| item * 3 }

p array

実行結果:

[3, 6, 9, 12, 15, 18, 21, 24, 27]

mapメソッドの使い方

mapメソッドはcollectメソッドの別名のため、同様の結果を返します。

array = [1, 2, 3, 4, 5, 6, 7, 8, 9]
p array.map { |item| item * 3 }

実行結果:

[3, 6, 9, 12, 15, 18, 21, 24, 27]

範囲オブジェクトでcollectメソッドを使う方法

collectメソッドは範囲メソッドでも使用できます。

range = 1..9
p range.collect { |item| item * 5 }

実行結果:

[5, 10, 15, 20, 25, 30, 35, 40, 45]

配列同様ブロックの処理結果が配列として返されていることがわかりますね!

まとめ

ここでは、配列や範囲オブジェクトでのブロック処理を、配列として取得するcollectメソッドについて解説しました。

  • collectメソッドとは
  • collectメソッドの使い方
  • collect!メソッドの使い方
  • 範囲オブジェクトでcollectメソッドを使う方法

collectメソッドを使用すれば、簡単にブロックの処理を配列として取得できますので使い方についてはよく理解しておきましょう。

もしcollectメソッドについて忘れてしまったら、この記事を思い出してくださいね!

この記事を書いた人

システムエンジニアとして10年勤務→フリーランスへ。
大規模システム開発からWebアプリ開発まで経験あり。最近ではPythonの機械学習に挑戦中。プログラミング初学者に向けてわかりやすく、ためになるコンテンツ作りを心がけています。

目次