0
0

【Ruby】eachメソッドで便利なやつ

Last updated at Posted at 2024-08-06

概要

eachメソッドで使える便利なものをまとめました。
配列のメソッドがほとんどなのでそっち調べたほうが早いかも。

起点、回数の指定

first(n)

  • 先頭からn個の要素分まで実行する(回数指定)
num = [1, 2, 3, 4, 5, 6, 7, 8, 9]

# 先頭から3回まで
num.first(3).each do |num|
  puts num
end

# result
1
2
3

last(n)

  • 末尾n個の要素分、実行する(起点指定)
alphabet = ["A", "B", "C", "D", "E",]

# 末尾3回分まで
alphabet.last(3).each do |num|
  puts num
end

# result
"C"
"D"
"E"

list[n1..n2]

  • n1個目からn2個目分まで実行する(回数・起点指定)
list = ["くま", "とら", "うさぎ", "かめ", "たこ", "ひと"]

# 要素2(うさぎ)から要素4(たこ)まで
list[2..4].each do |num|
  puts num
end

# result
"うさぎ"
"かめ"
"たこ"


# .silce(n1..n2)でも可能
list.slice(2..4).each do |num|
  puts num
end

# result
"うさぎ"
"かめ"
"たこ"

配列を操作

list.uniq

  • 重複したものを無視する
num = [1, 1, 2, 2, 2, 3]

# 重複したものは無視する
num.uniq.each do |num|
  puts num
end

# result
1
2
3

list.push(n)

  • 末尾にnを追加して実行

list.unshift(n)

  • 先頭にnを追加して実行
num = [1, 2, 3]

# 先頭に要素を追加
num.push("Ruby").each do |num|
  puts num
end

# result
"Ruby"
1
2
3

# 末尾に要素を追加
num.unshift(81).each do |num|
  puts num
end

# result
1
2
3
81

インデックス番号の使用

each_with_index

  • インデックス番号を扱うことができる
name = ["田所", "木村", "平野"]

# 第一引数が要素、第二引数がインデックス番号
name.each_with_index do |name, num|
  puts "#{num}番目は#{name}さんです"
end

# result
"0番目は田所さんです"
"1番目は木村さんです"
"2番目は平野さんです"

each.with_index(n)

  • 初期値をnとしてインデックス番号を扱うことができる
  • eachメソッドとwith_indexメソッドの合せ技であり、each_with_indexとは違う
name = ["遠野", "三浦", "橋田"]

# インデックス番号を1から始める
name.each.with_index(1) do |name, num|
  puts "#{name}さんは#{num}着です"
end

# result
"遠野さんは1着です"
"三浦さんは2着です"
"橋田さんは3着です"

要素を好きなように切り分けて実行

each_slice(n)

  • 配列の要素を指定したn個分切り分けて実行できる1
array = 1..10

# 2個づつに分けて実行
array.each_slice(2) do |array|
  p array
end

# result
[1, 2]
[3, 4]
[5, 6]
[7, 8]
[9, 10]

# 3個づつに分けて実行
array.each_slice(3) do |array|
  p array
end

# result
[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
[10]

each_cons(n)

  • 連続したn個分の要素を一つづつずらして取得できる1
array = 1..7

# 3つ分の要素を一つづつ分けて実行
array.each_cons(3) do |array|
  p array
end

# result
[1, 2, 3]
[2, 3, 4]
[3, 4, 5]
[4, 5, 6]
[5, 6, 7]

each_line

  • 改行ごとに切り分ける
animals = "cat\ndog\nrabbit\nhamster"

animals.each_line do |animal|
  puts animal
end

# result
"cat"
"dog"
"rabbit"
"hamster"
  1. each_slice(n)each_cons(n)は下記のようにも記載できる

    array = 1..10
    
    # 変数を3つ
    array.each_slice(3) do |n1, n2, n3|
      puts "#{n1}, #{n2}, #{n3}"
    end
    
    # result
    "1, 2, 3"
    "4, 5, 6"
    "7, 8, 9"
    "10, , "
    
    2
0
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
0
0