2013-03-28 13 views
19

Teraz jest to tablica,Ruby dostęp do tablicy 2 kolejne (sekwencji) elementy naraz

[1,2,3,4,5,6,7,8,9] 

Chcę,

[1,2],[2,3],[3,4] upto [8,9] 

Kiedy robię, each_slice (2) pojawia się,

[[1,2],[3,4]..[8,9]] 

Im obecnie to robi,

arr.each_with_index do |i,j| 
    p [i,arr[j+1]].compact #During your arr.size is a odd number, remove nil. 
end 

Czy istnieje lepszy sposób?

+0

możliwe duplikat [Czy istnieje algorytm, aby wyodrębnić wartości w duetach z tablicy i działać nad nimi?] (http://stackoverflow.com/questions/6075266/is-there-an-algorithm-to-extract-values-in-duets-from-an-array-and-operate-over) – jvnill

Odpowiedz

30

Ruby czyta swój umysł. Chcesz cons ekutywnych elementów?

[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]] 
+2

Gosh, Kocham Ruby. –

4

.each_cons robi dokładnie to, co chcesz.

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

Prawie got it right :)

arr = [1,2,3,4,5,6,7,8,9] 
arr.each_cons(2) do |chunk| 
    p chunk 
end 
# >> [1, 2] 
# >> [2, 3] 
# >> [3, 4] 
# >> [4, 5] 
# >> [5, 6] 
# >> [6, 7] 
# >> [7, 8] 
# >> [8, 9] 
0

A jeśli chciał zaimplementować własną each_cons:

arr = [1, 2, 3, 4, 5, 6, 7, 8, 9] 
cons = 2 

0.upto(arr.size - cons) do |i| 
    p arr[i, cons] 
end 

wyjściowa:

[1, 2] 
[2, 3] 
[3, 4] 
[4, 5] 
[5, 6] 
[6, 7] 
[7, 8] 
[8, 9] 
Powiązane problemy