2010-08-19 16 views
21

Tengo una matriz con, digamos, 500 elementos. Sé que puedo seleccionar los primeros 100 haciendo .first(100), mi pregunta es ¿cómo selecciono elementos del 100 al 200?¿Cómo seleccionar elementos de la matriz en un rango dado en Ruby?

+0

posible duplicado de [Devolver una parte de una matriz en Ruby] (http://stackoverflow.com/questions/695290/returnning-a-part-of-an-array-in-ruby) –

Respuesta

42

Puede usar rangos en el subíndice de matriz: Respuesta

arr[100..200] 
+3

También puede hacer rangos negativos: arr [100 ..- 50] obtendría el 100º elemento a través del elemento 450º, en el caso de una matriz de 500 elementos. –

+0

¡Buena respuesta, gracias! :) – Vinozio

-3
new_array = old_array.first(200) - old_array.first(100) 
+0

Eso hace sentido :). Me preguntaba si había un método para este – deb

+0

. Ese crea dos arreglos temporales y luego hace una diferencia de ajuste ... no de espacio y tiempo eficiente, creo. – DarkDust

+0

a la derecha. Estoy en una caja de ganar y no tengo rubí, así que no pude probar otras soluciones en IRB. También pensé en array.find (100..200) pero no sé si acepta rangos. Pruébalo. – s84

2
sample_array = (1..500).to_a 
elements_100_to_200 = sample_array[100..200] 

Puede pasar un rango como el índice de una matriz y obtener un subconjunto de los elementos consultados desde que subrango.

13

Puede hacerlo de esta manera:

array[100..200] # returns the elements in range 100..200 
# or 
array[100,100] # returns 100 elements from position 100 

More Information

10

de dvcolgan es correcto, pero parece que usted podría intente dividir su matriz en grupos de 100. Si ese es el caso, hay un método incorporado conveniente para eso:

nums = (1..500).to_a 

nums.each_slice(100) do |slice| 
    puts slice.size 
end 

# => 100, 100, 100, 100, 100 
Cuestiones relacionadas