Ruby: Bagaimana cara mengulang pada rentang, tetapi dalam peningkatan yang ditetapkan?


156

Jadi saya mengulangi rentang seperti:

(1..100).each do |n|
    # n = 1
    # n = 2
    # n = 3
    # n = 4
    # n = 5
end

Tapi yang ingin saya lakukan adalah beralih pada tahun 10-an.

Jadi sebagai ganti meningkat n1, yang berikutnya nakan benar-benar 10, lalu 20, 30, dll.



@DiegoDias tetapi ini memiliki yang terbaik dan kemudian utas itu
Jackson Jegatheesan

Jawaban:



12

Anda bisa menggunakannya Numeric#step.

0.step(30,5) do |num|
  puts "number is #{num}"
end
# >> number is 0
# >> number is 5
# >> number is 10
# >> number is 15
# >> number is 20
# >> number is 25
# >> number is 30

6

Inilah cara lain yang mungkin lebih familiar untuk dilakukan:

for i in (0..10).step(2) do
    puts i
end

10
Maaf, tetapi panduan gaya ruby ​​sangat tidak menyarankan forloop penggunaan .
Darth Egregious

@ DarthEgregious kenapa begitu?
Doug

Ini merupakan perpanjangan dari filosofi bahwa setiap hal adalah objek dan setiap tindakan adalah panggilan metode. Jadi daripada menggunakan built-in untuk mengulang for, Anda harus menggunakan eachmetode ini.
Darth Egregious

5
rng.step(n=1) {| obj | block } => rng

Iterasi lebih dari rng, melewati setiap elemen ke blok. Jika rentang berisi angka atau string, pemesanan alami digunakan. Kalau tidak, langkah memanggil succ untuk beralih melalui elemen rentang. Kode berikut menggunakan kelas X, yang didefinisikan dalam dokumentasi tingkat kelas.

range = Xs.new(1)..Xs.new(10)
range.step(2) {|x| puts x}
range.step(3) {|x| puts x}

menghasilkan:

1 x
3 xxx
5 xxxxx
7 xxxxxxx
9 xxxxxxxxx
1 x
4 xxxx
7 xxxxxxx
10 xxxxxxxxxx

Referensi: http://ruby-doc.org/core/classes/Range.html

......

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.