0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Ruby] firstメソッドとlastメソッド

Last updated at Posted at 2021-07-13

##はじめに
私が現在作成中のオリジナルアプリに進捗状況を記録していく機能があります。データベースの蓄積されている進捗記録たちの一番最新に更新されたレコードの情報から進捗状況をプログレスバーで表示させています。

その時に役に立ったのがfirstメソッドです。その逆の効果を得られるlastメソッドも一緒に紹介したいと思います。
よろしくお願いします。

##firstメソッド

firstメソッドは配列に対して使用します。配列の中の最初の要素を取り出すために使うメソッドです。つまり配列を添字で0の要素ですね。

配列.first

このように使います。もし配列が空であればnilを返します。

例を紹介します。

fruits = ["apple", "banana", "peach", "melon"]

puts fruits.first
# => "apple"

firstメソッドは引数に数字を与えることで、配列のはじめの要素からいくつまでを取得するか指定することができます。
先ほどの配列fruitsを使って例を見てみましょう。↓

fruits = ["apple", "banana", "peach", "melon"]

puts fruits.first(2)
puts fruits.first(3)

# => ["apple", "banana"]
# => ["apple", "banana", "peach"]

もし、指定した数字が配列のなかの要素の数を超えていれば、その配列の最後までを取得します。

##lastメソッド
lastメソッドはfirstメソッドの逆バージョンです。
配列の最後の要素を取り出すことができるメソッドです。もちろん引数を渡すことで、その数字の数だけ、配列の最後から要素を取得してくれます。

一応例を記載しておきます。↓

fruits = ["apple", "banana", "peach", "melon"]

puts fruits.last
puts fruits.last(2)
puts fruits.last(3)

# => "melon"
# => ["melon", "peach"]
# => ["melon", "peach", "banana"]

##おまけ

私はこのメソッドを利用して、データベースから取得してきた進捗記録から最新の情報だけを抜き取り、プログレスバーに反映させました。

特に説明などはしませんが、whereメソッドで取得している実際のコードを一応載せときます↓

@progresses = Progress.where(students_textbook_id: @students_textbook.id).order('created_at DESC')

このような取得の仕方をすることで、@progresses.firstとするだけで使えます。

データベースから取得する時はwhereメソッドがかなり相性が良いです。なぜなら、whereメソッドは配列としてデータベースから取得してきた情報を返してくれるので、そのままfirstメソッドが使えます。
もしfind_byメソッドを使って情報を取ってきた場合、配列では返してくれないので、おそらくfirstメソッドは使えないでしょう(確認はしていません)

全くの別件ですが、以前このwhereメソッドとfind_byメソッドの特徴の違いで悩まされたことがあります。その時の記事もよかったら読んでください↓

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?