jak teno zakresie ruby?
range = (0..10)
jak mogę dostać numer tak:
0 5 10
oraz pięć za każdym razem, ale mniej niż 10
jeśli zakres = (0..20) następnie Powinienem uzyskać to:
0 5 10 15 20
jak teno zakresie ruby?
range = (0..10)
jak mogę dostać numer tak:
0 5 10
oraz pięć za każdym razem, ale mniej niż 10
jeśli zakres = (0..20) następnie Powinienem uzyskać to:
0 5 10 15 20
Metoda step
opisana w http://ruby-doc.org/core/classes/Range.html powinien wykonać zadanie, ale poważnie szkodzimoże zaszkodzić czytelności.
Wystarczy rozważyć:
(0..20).step(5){|n| print ' first ', n }.each{|n| print ' second ',n }
Możesz myśleć, że etap (5) rodzaj produkuje nowy asortyment, jak why_ „s pytanie początkowo przeznaczony. Ale każdy jest wywoływany na (0..20) i musi zostać zastąpiony innym krokiem (5), jeśli chcesz "ponownie użyć" zakresu 0-5-10-15-20.
Może będzie ci dobrze z czymś takim jak (0..3).map{|i| i*5}
?
Ale "utrzymujących" wyników metody krokowego z.to_a
powinny również działać grzywny.
Spróbuj użyć .step()
, aby przejść przez dany krok.
(0..20).step(5) do |n|
print n,' '
end
daje ...
0 5 10 15 20
Jak wspomniano przez dominikh można dodać .to_a
na końcu dostać magazynować formę listy numerów: (0..20).step(5).to_a
i jeśli chcesz zapisać liczby, których możesz użyć (0..10) .step (5) .to_a - wymaga to ruby> = 1.8.7. Alternatywą jest 0.step (10, 5) .to_a, co również wymagało ruby> = 1.8.7 –
Jak Dav powiedział: ale dodaj do:
(0..20).step(5).to_a # [0, 5, 10, 15, 20]
Zwykle nie musisz dodawać 'to_a', chyba że naprawdę * potrzebujesz * tablicy. –
"poważnie szkodzi czytelności" - * co * ?! Czemu? W jaki sposób? –
Twierdzę, że krok jest bardziej czytelny niż mapa tego rodzaju, przynajmniej w tym przypadku. – Amber
'(0..20) .step (5) .each {...}. Każdy {...}' zrobi to, co chcesz. –