2012-03-20 18 views
34

¿Cómo puedo iterar hasta cuatro objetos de una matriz y no todos? En el siguiente código, itera sobre todos los objetos. Necesito solo los primeros cuatro objetos.Iterar los primeros n elementos de una matriz

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

¿Se puede hacer como objects=objects.slice(4), o es la única manera de iteración?

Editar:

También necesito para imprimir el número de veces que ocurre la iteración, pero mi solución objects[0..3] (gracias a respuestas aquí) de largo.

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

simplemente estás tratando de agarrar los primeros cuatro objetos, o estás tratando de iterar sobre los primeros cuatro objetos ? Puede usar el método 'tomar' para tomar los primeros n objetos si solo quiere iterar sobre ellos:' objects.take (4) .each do ... ' –

+1

¿Por qué no' arr = Products.limit (4). to_a' (¿pero probablemente ni siquiera necesites 'to_a')? Cada vez que te encuentres diciendo 'Modelo.todos 'debes pensar de nuevo (y luego por tercera vez). –

+1

@Yosef desea [each_with_index] (http://www.ruby-doc.org/core-1.9.3/Enumerable.html#method-i-each_with_index) ... también, '++' no es un ruby operator – Kyle

Respuesta

37

supongo que la forma rubyst iría por

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

p arr; 

para que con la [0..3] se crea un subconjunto que contiene sólo los 4 primeros elementos de los objetos.

+1

¿Por qué repetir cuando solo 'arr = objects [0..3]' hace lo mismo? –

+0

por favor vea mi edición – Yosef

2

Puede empalmar la matriz como ésta objects[0,4]

objects[0,4] está diciendo: se inicia en el índice 0 y dame 4 elementos de la matriz.

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

p arr 
+1

¿Por qué 'inject' cuando solo' arr = objects [0,4] 'hará? –

+0

Supuse que el OP quería iterar sobre una matriz y hacer algo más que simplemente recopilar los elementos. – Kyle

4
arr = objects[0..3] 

Eso es todo. Usted no necesita el resto

Cuestiones relacionadas