Ruby to_a方法卡住了

时间:2016-12-17 11:53:46

标签: ruby

请原谅我的问题,但我是初学者学习Ruby。  我有一段代码,不知道如何将输出代码输出到数组。我尝试使用Ruby to_a方法,但不起作用,我确定这很简单,但请帮助我!!!

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

输出为383,766,1149,1532,1915,2298但我希望有[383,766,1149,1532,1915,2298]

3 个答案:

答案 0 :(得分:2)

您需要(带有<<)结果导入数组foo,例如:

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]

另一种方法:

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

请参阅Enumerable#each_with_object

但你应该在这里使用map

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

答案 1 :(得分:1)

您可以使用Range#step直接获得所需内容:

length = 2300
divide = 6
result = length/divide

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

length = 2300
divide = 6

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

答案 2 :(得分:0)

返回一个数组,其中包含为每个元素运行一次块的结果 - 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]