はじめに
いま、Rubyプログラマに勧めてもらったチェリー本を使って学習を進めています。
Rubyの勉強を開始してから1週間くらいしか経っていない初心者が、覚えておきたい配列のメソッドを調べました。
個人的な振り返りメモも兼ねています。
ぜひ間違えていたら、コメントや編集リクエストで教えていただけると嬉しいです。
参考文献
プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで Software Design plus | 伊藤 淳一 | コンピュータ・IT | Kindleストア | Amazon
start_with? (String) - Rubyリファレンス
class Array (Ruby 2.6.0)
Rubyのeachでindexを取得する:each_with_index | UX MILK
【Ruby】each_with_indexは知ってたけどeach.with_indexは知らなかった… - 訳も知らないで
class Enumerator (Ruby 2.6.0)
動作確認環境
- Windows 10
- ruby 2.5.5p157
eachメソッドでループする
今回勉強に使わせてもらっているチェリー本によると、for文ではなく、eachメソッドを使用することが多いとのことです。
arr = ['Spring', 'Summer', 'Autumn', 'Winter']
arr.each do |n|
puts n
end
実行結果
Spring
Summer
Autumn
Winter
eachメソッドでindex(添字)を取得したい
Enumerableモジュールのメソッドの一つであるeach_with_index
を使用します。
arr = ['Spring', 'Summer', 'Autumn', 'Winter']
arr.each_with_index do |n, index|
puts "#{index}, #{n}"
end
実行結果
0, Spring
1, Summer
2, Autumn
3, Winter
index(添字)の始まりの値を設定したい
Enumeratorクラスのメソッドの一つであるwith_index
メソッドを使用します。
サンプルは、2からindexを開始するという意味です。
arr = ['Spring', 'Summer', 'Autumn', 'Winter']
arr.each.with_index(2) do |n, index|
puts "#{index}, #{n}"
end
実行結果
2, Spring
3, Summer
4, Autumn
5, Winter
配列同士を比較したい
サンプルコード
arr = ['Spring', 'Summer', 'Autumn', 'Winter']
arr_compare = ['Spring', 'Summer', 'Autumn']
puts arr.eql?arr_compare # false
arr_compare.push('Winter') # 要素を追加してから比較
puts arr.eql?arr_compare # true
配列が空かどうか確認
arr = ['Spring', 'Summer', 'Autumn', 'Winter']
arr_empty = []
puts arr_empty.empty? # true
puts arr.empty? # false
指定した範囲の配列要素を取得する
サンプルコード
arr = ['Spring', 'Summer', 'Autumn', 'Winter']
p arr[1...3] # 3を含まない
p arr[1..3] # 3を含む
実行結果
["Summer", "Autumn"]
["Summer", "Autumn", "Winter"]
条件に一致する要素を取り出して新しい配列を作る
サンプルコード
arr = ['Spring', 'Summer', 'Autumn', 'Winter']
# 文字列の先頭がSの要素を抽出
p arr.select { |n| n.start_with?("S") }
実行結果
["Spring", "Summer"]
条件と不一致の要素を取り出して新しい配列を作る
サンプルコード
arr = ['Spring', 'Summer', 'Autumn', 'Winter']
# 文字列の最後尾がrの要素を抽出
p arr.reject { |n| n.end_with?("r") }
実行結果
["Spring", "Autumn"]
全要素に対してブロック内で評価した結果で新しい配列を作る
p arr.map { |n| n.start_with?("S") }
実行結果
[true, true, false, false]
条件に一致する最初の要素を返す
サンプルコード
# uを含む文字列を検索
p arr.find { |n| n.index("u")}
実行結果
"Summer"
おわりに(おまけ)
実はチェリー本を購入する前に、
この記事の下書きを作っていたのですが、
だいたい(もしかしたら全部)チェリー本に書いていました。
まとめた意味がなくなってしまい、すごく悲しくなりました。