请原谅我的问题,但我是初学者学习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]
答案 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]