2013-02-11 72 views
0

我有一个范围,如(1000..0),我正在使用each,但它什么也没做。我试图将它转换为一个数组,并得到一个空的数组。如何将降压范围转换为数组?

我也试过(1000..0).step(-1).each,它告诉我step cant be negative ...

有没有办法使用(1000..0).each所以它会做重复,或转换成类似[1000,999,998,...,0]数组?

+2

的http://计算器.com/questions/2070574/is-there-a-reason-that-we-can-iterate-on-reverse-range-in-ruby =>很多工作在这里 – 2013-02-11 18:10:31

回答

4
1000.downto(0).each { |i| ... }   
0

(0..1000).to_a.reverse 这将创建所需的数组。

+0

我不能说我曾经看过'map {| x | x}'之前。你为什么要做一个无操作的地图? – tadman 2013-02-11 18:11:32

+0

是啊,不知道这是多么标准...我使用地图来创建一个数组。将范围转换为数组是给出的选项之一。只是解决这个问题。 – mohit6up 2013-02-11 18:17:50

+1

任何Range都有一个'to_a'方法,可以更加优雅地完成这个任务。 – tadman 2013-02-11 18:58:09

0

两种方式你可能会去这样做:

(0..1000).each do |i| 
    n = 1000 - i 
    # Use n for all calculations 
end 

(0..1000).to_a.reverse.each do |n| 
    # Involves creating temporary array, but overhead is usually minor for 
    # relatively small numbers. 
end 

不要忘记,你也可以做到这一点没有一个范围:

1001.times do |i| 
    n = 1000 - i 
end 
0
#1000 item array 
step_down_array = 1000.step(0, -1).to_a 

#small enumerator: 
step_down = 1000.step(0, -1)