21

eachRubyでループの開始オフセットを設定するにはどうすればよいですか? a[3]の代わりにループを開始したいa[0]。どうすれば設定できますか?

a = [ab, cd, ef, gh, hi, jk]

a.each do |i|
#some stuff
end
4

5 に答える 5

47

別の、おそらくより直接的で読みやすい可能性は、次を使用することArray#dropです。

a.drop(3).each do |i|
  # do something with item i
end

から継承された他のメソッドと組み合わせると、これは本当に素晴らしいEnumerableので、命令型eachループに代わるより良い方法がある可能性があります。抽出されたスライスをフィルタリングし、後で変換したいとします。

a = [0,1,2,3,4,5,6,7]
a.drop(3).select(&:even?).map { |x| x * 2 }
# => [8, 12]

または、すべての値のリストを出力したいとします。

a = ["1", "2", "3", "4", "5"]
puts a.drop(3).join("\n")

出力:

4
5

関数型プログラミングから継承されたこれらの機能は、Ruby を非常に強力なものにしています :)

于 2012-05-01T10:20:07.377 に答える
23

配列のサブパーツで使用eachします。以下の例では、4 番目の要素から最後まで:

a[3..-1].each do |i|
  #some stuff
end
于 2012-05-01T10:11:54.027 に答える
4

これはあなたを助けるでしょう

a[3..-1].each do |i|
  #your logic
end
于 2012-05-01T10:15:09.030 に答える
3

ほとんどの Rubyist は古き良き for ループを忘れています。

n = 3
for i in n...a.size
  puts a[i]
end
于 2012-05-01T10:17:53.280 に答える