2014-12-04 112 views
2

說你有這個數組:如何迭代n個元素的重疊組中的數組?

arr = w|one two three| 

如何我可以遍歷它具有連續的兩個元素爲塊參數是這樣的:

1st cycle: |nil, 'one'| 
2nd cycle: |'one', 'two'| 
3rd cycle: |'two', 'three'| 

SOFAR我這個只來了:

arr.each_index { |i| [i - 1 < 0 ? nil: arr[i - 1], arr[i]] } 

任何更好的解決方案?有沒有像each(n)

回答

7

您可以添加nil爲您arr的第一元素,並使用Enumerable#each_cons方法:

arr.unshift(nil).each_cons(2).map { |first, second| [first, second] } 
# => [[nil, "one"], ["one", "two"], ["two", "three"]] 

(我使用map這裏要說明究竟是在每次迭代返回)

+0

這正是我所期待的。我確信有這樣的事情,我只是不知道。謝謝:) – 2014-12-04 09:01:56

+1

不錯。但可能不會更改原始數組。 '([nil] + arr).each_const(2)' – Humza 2014-12-04 15:20:39

3
> [1, 2, 3, 4, 5, 6, 7, 8, 9].each_cons(2).to_a 
# => [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [6, 7], [7, 8], [8, 9]]