2012-03-20 33 views
34

Jak mogę iterować maksymalnie cztery obiekty tablicy, a nie wszystkie? W poniższym kodzie iteruje on nad wszystkimi obiektami. Potrzebuję tylko pierwszych czterech obiektów.Powtórz pierwsze n elementów tablicy

objects = Products.all(); 
arr=Array.new 
objects.each do |obj| 
    arr << obj 
end 
p arr 

Czy można to zrobić tak jak objects=objects.slice(4), czy jest to jedyna metoda?

Edit:

ja też trzeba wydrukować ile razy iteracja się dzieje, ale moje rozwiązanie objects[0..3] (dzięki odpowiedziami tutaj) długości.

i=0; 
arr=Array.new 
objects[0..3].each do |obj| 
    arr << obj 
    p i; 
    i++; 
end 
+2

Są po prostu próbuje złapać pierwsze cztery przedmioty, albo próbujesz iteracyjne ciągu pierwszych czterech obiektów ? Możesz użyć metody 'take', aby pobrać pierwsze n obiektów, jeśli chcesz po prostu iterować:' objects.take (4) .each do ... ' –

+1

Dlaczego nie' arr = Products.limit (4). to_a' (ale prawdopodobnie nie potrzebujesz nawet 'to_a')? Za każdym razem, gdy mówisz "Model.all", powinieneś pomyśleć raz jeszcze (a potem po raz trzeci). –

+1

@ Youosef chcesz [each_with_index] (http://www.ruby-doc.org/core-1.9.3/Enumerable.html#method-i-each_with_index) ... także, '++' nie jest operator ruby ​​ – Kyle

Odpowiedz

37

Chyba droga rubyst pójdzie przez

arr=Array.new 
objects[0..3].each do |obj| 
    arr << obj 
end 

p arr; 

tak że z [0..3] utworzyć subarray zawierający tylko 4 pierwsze elementy z obiektów.

+1

Dlaczego iterować, gdy tylko 'arr = objects [0..3]' robi to samo? –

+0

zobacz moją edycję – Yosef

2

można splatać tablica jak ten objects[0,4]

objects[0,4] mówi: zaczynają się od indeksu 0 i dać mi 4 elementy tablicy.

arr = objects[0,4].inject([]) do |array, obj| 
    array << obj 
end 

p arr 
+1

Dlaczego "wstrzyknąć", gdy wystarczy "arr = objects [0,4]"? –

+0

Założono, że OP chce iterować po tablicy i zrobić coś innego niż tylko zbieranie elementów. – Kyle

4
arr = objects[0..3] 

To wszystko. Nie trzeba reszta

Powiązane problemy