1
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?

Rubyの基本(配列 Part2)

Last updated at Posted at 2024-03-02

mapによる配列の操作

配列を操作する方法として、eachメソッド以外にmapメソッドを使う方法がある。
以下の例のように、配列の各値に5ずつ足すとき、eachメソッドでは空の配列を用意してからその配列に追加するが、mapメソッドでは新しい配列にそのまま代入できるため、eachメソッドに比べより簡潔に書くことができる。
また、元の配列を直接更新することも可能。

sample_01.rb
scores = [70, 90, 80]

# eachの場合
updated_scores_01 = []
scores.each do |score|
  updated_scores_01 << score + 5
end
p updated_scores_01
# 出力:[75, 95, 85]

# mapの場合
updated_scores_02 = scores.map do |score|
  score + 5
end
p updated_scores_02
# 出力:[75, 95, 85]

# 元のデータを直接更新
scores.map! do |score|
  score + 5
end
p scores
# 出力:[75, 95, 85]

元データ直接更新の場合、メソッド名の後の!が必須となる。

filterによる配列の操作

配列の中から条件に合致する値のみ取り出す場合、eachメソッドだけでなく、filterも使える。

sample_02.rb
scores = [70, 90, 80, 65, 85, 77]

# eachの場合
pass_score_01 = []
scores.each do |score|
  if score >= 80
    pass_score_01 << score
  end
end
p pass_score_01
# 出力:[90, 80, 85]

# mapの場合(使えない?)
# pass_score_02 = scores.each do |score|
#   if score >= 80
#     pass_score_02 << score
#   end
# end
# p pass_score_02
# ※※※ エラーとなる ※※※

# filterの場合
filterd_scores = scores.filter do |score|
  score >= 80
end
p filterd_scores
# 出力:[90, 80, 85]

# 元データの直接更新
scores.filter! do |score|
  score >= 80
end
p scores
# 出力:[90, 80, 85]
1
0
0

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
1
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?