2016-12-17 3 views
1

Bitte entschuldigen Sie meine Frage, aber ich bin Anfänger Ruby lernen. Ich habe einen Block von Code und weiß nicht, wie man den Ausgabecode zu einem Array macht. Ich habe versucht, Ruby to_a Methode zu verwenden, aber nicht funktioniert, ich bin mir sicher, das ist wirklich einfach, aber bitte helfen Sie mir !!!Ruby to_a Methode stecken

length = 2300        #line 1 
divide = 6         #line 2 
result = length/divide      #line 3 

1.upto(divide) do |i|      #line 4 
    p foo = i * result      #line 5 
end           #line 6 

Ausgang ist 383,766,1149,1532,1915,2298 aber mein Wunsch ist [383,766,1149,1532,1915,2298]

Antwort

2

Sie müssen Push (mit <<) Ihr Ergebnis in einem Array foo zum Beispiel haben, so etwas wie:

length = 2300        #line 1 
divide = 6         #line 2 
result = length/divide      #line 3 

foo = [] 
1.upto(divide) do |i|      #line 4 
    foo << i * result      #line 5 
end 

p foo #=> [383, 766, 1149, 1532, 1915, 2298] 

Eine andere Möglichkeit, dies zu tun:

(1..divide).each_with_object([]) { |r,arr| arr << r*result } 

Siehe Enumerable#each_with_object

Aber Sie sollten wirklich map hier werden:

part = length/divide 
p (1..divide).map { |idx| idx*part } #=> [383, 766, 1149, 1532, 1915, 2298] 
1

Sie Range#step nutzen könnten zu bekommen, was Sie wollen direkt:

length = 2300 
divide = 6 
result = length/divide 

(result..length).step(result).to_a 
#=> [383, 766, 1149, 1532, 1915, 2298] 

oder

length = 2300 
divide = 6 

(0..length).step(length/divide).drop(1) 
#=> [383, 766, 1149, 1532, 1915, 2298] 
0

Ret ein Array mit den Ergebnissen der Ausführung eines Blocks für jedes Element - that is what map does.

length = 2300        #line 1 
divide = 6         #line 2 
result = length/divide      #line 3 

res = 1.upto(divide).map do |i|    #line 4 
    i * result        #line 5 
end 

p res # => [383, 766, 1149, 1532, 1915, 2298]