wie dieseüber Rubin-Bereich?
range = (0..10)
wie kann ich Nummer wie diese:
0 5 10
plus fünf jedes Mal, aber weniger als 10
wenn Bereich = (0..20), dann sollte ich Get this:
0 5 10 15 20
wie dieseüber Rubin-Bereich?
range = (0..10)
wie kann ich Nummer wie diese:
0 5 10
plus fünf jedes Mal, aber weniger als 10
wenn Bereich = (0..20), dann sollte ich Get this:
0 5 10 15 20
Die step
Methode in 01 beschriebensollte den Job tun, aber ernsthaft schadetkann die die Lesbarkeit schaden.
Man denke nur an:
(0..20).step(5){|n| print ' first ', n }.each{|n| print ' second ',n }
Sie mögen denken, dass Schritt (5) Art eine neue Range produziert, wie why_ ‚s Frage zunächst gedacht. Aber jeder wird auf dem (0..20) aufgerufen und muss durch einen anderen Schritt (5) ersetzt werden, wenn Sie den 0-5-10-15-20-Bereich "wiederverwenden" möchten.
Vielleicht werden Sie mit etwas wie (0..3).map{|i| i*5}
in Ordnung sein?
Aber "persistierenden" die Ergebnisse der Schritt-Methode mit.to_a
sollte auch feine arbeiten.
Versuchen Sie, .step()
zu verwenden, um bei einem bestimmten Schritt durchzugehen.
(0..20).step(5) do |n|
print n,' '
end
gibt ...
0 5 10 15 20
Wie dominikh erwähnt, Sie .to_a
am Ende zu bekommen eine speicherbare Form der Zahlenliste hinzufügen: (0..20).step(5).to_a
und wenn Sie die Zahlen speichern möchten, können Sie (0..10) .step (5) .to_a verwenden - dies erfordert jedoch ruby> = 1.8.7. Eine Alternative ist 0.step (10, 5) .to_a, die auch benötigt wird ruby> = 1.8.7 –
Wie Dav sagte, aber add to_a:
(0..20).step(5).to_a # [0, 5, 10, 15, 20]
Sie müssen normalerweise 'to_a' nicht hinzufügen, es sei denn, Sie * brauchen * wirklich ein Array. –
"ernsthaft schadet der Lesbarkeit" - * was * ?! Warum? Wie? –
Ich würde argumentieren, dass Schritt ist lesbarer als eine Karte dieser Art, zumindest in diesem Fall. – Amber
'(0..20) .Schritt (5) .Each {...}. Jeder {...}' wird tun, was Sie wollen. –