Rubyには配列や範囲オブジェクトの値を返すto_aメソッドがあります。
「to_aメソッドの使い方がよくわからない」
「配列と範囲オブジェクトを連結したい」
といった方に向けて、この記事ではto_aメソッドについて、以下の内容で解説していきます。
・to_aメソッドとは
・配列で使用する方法
・範囲オブジェクトで使用する方法
・文字列で使用する方法
to_aメソッドについてわかりやすく解説していますので、ぜひ参考にしてください!
to_aメソッドとは
to_aは一言で言うと「レシーバ自身を返すメソッド」です。
to_aメソッドの書き方
オブジェクト.to_a
オブジェクトには配列や配列を返すメソッド、範囲オブジェクトなどを指定できます。
範囲オブジェクトを指定した場合、各要素を集めて配列として返します。
配列で使用する方法
ここでは配列でto_aメソッドを使用する方法を見ていきましょう。
以下のサンプルをご覧ください。
array1 = [1, 2, 3] array2 = [4, 5, 6] array3 = [7, 8, 9] def array_m(a1, a2) a1.to_a + a2.to_a end p array_m(array1, array2) p array_m(array1, array3)
実行結果:
[1, 2, 3, 4, 5, 6] [1, 2, 3, 7, 8, 9]
このサンプルではメソッドarray_mでto_aメソッドを使用して配列同士を連結して返しています。
以下のように配列と範囲オブジェクトを連結することもできます。
array = [1, 2, 3] range = 4..6 def array_m(a1, a2) a1.to_a + a2.to_a end p array_m(array, range)
実行結果:
[1, 2, 3, 4, 5, 6]
このように配列と範囲オブジェクトの連結もできました。
前述したように範囲オブジェクトにto_aメソッドを指定した場合は配列として返すため、このような連結が可能になります。
もし、to_aメソッドを指定しなかった場合はエラー「TypeError」が発生します。
範囲オブジェクトで使用する方法
範囲オブジェクトにto_aメソッドを使用すると、以下のように配列で取得することができます。
range1 = 1..10 range2 = 'a'..'z' p range1.to_a p range2.to_a
実行結果:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]
文字列で使用する方法
to_aメソッドは文字列に対しては使用できませんが、配列を返すメソッドを指定した場合は使用できます。
以下では文字列を指定した区切り文字で分割するsplitメソッドで文字列を配列にしています。
str = "apple, orange, melon, banana, pineapple" p str.split(",").to_a
実行結果:
["apple", " orange", " melon", " banana", " pineapple"]
まとめ
ここでは、配列や範囲オブジェクトの値を返すto_aメソッドについて解説しました。
- to_aメソッドとは
- 配列で使用する方法
- 範囲オブジェクトで使用する方法
- 文字列で使用する方法
to_aメソッドは範囲オブジェクトの要素を1つずつ配列にして取得することができますので、使い方については覚えておきましょう。
もし、to_aメソッドの使い方を忘れてしまったら、この記事を思い出してくださいね!