Resumen: La pregunta básica aquí fue, descubrí, si puede pasar un bloque de código a una matriz de Ruby que realmente reducirá el contenido de esa matriz a otra array, no a un solo valor (la forma en que inyecta lo hace). La respuesta corta es no".Corte una matriz de Ruby según las rayas dentro de ella
Estoy aceptando la respuesta que dice esto. Gracias a Squeegy por una excelente estrategia de bucle para obtener rayas de una matriz.
The Challenge: Para reducir los elementos de una matriz sin pasar por ella explícitamente.
la entrada: Todos los números enteros de -10 a 10 (excepto 0) ordenó al azar.
La salida deseada: Una matriz que representa rayas de números positivos o negativos. Por ejemplo, un -3 representa tres números negativos consecutivos. A 2 representa dos números positivos consecutivos.
Script de ejemplo:
original_array = (-10..10).to_a.sort{rand(3)-1}
original_array.reject!{|i| i == 0} # remove zero
streaks = (-1..1).to_a # this is a placeholder.
# The streaks array will contain the output.
# Your code goes here, hopefully without looping through the array
puts "Original Array:"
puts original_array.join(",")
puts "Streaks:"
puts streaks.join(",")
puts "Streaks Sum:"
puts streaks.inject{|sum,n| sum + n}
salidas de la muestra:
Original Array:
3,-4,-6,1,-10,-5,7,-8,9,-3,-7,8,10,4,2,5,-2,6,-1,-9
Streaks:
1,-2,1,-2,1,-1,1,-2,5,-1,1,-2
Streaks Sum:
0
Original Array:
-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,1,2,3,4,5,6,7,8,9,10
Streaks:
-10,10
Streaks Sum:
0
Nota unas pocas cosas:
- La matriz de rayas tiene valores positivos y negativos alterna.
- La suma de las rayas de los elementos es siempre 0 (como la suma del original).
- La suma de los valores absolutos de la matriz racha es siempre 20.
esperanza que está claro!
Edit: ¡Me doy cuenta de que construcciones como rechazo! en realidad están recorriendo el conjunto en el fondo. No excluyo el bucle porque soy una persona mala. Solo estoy buscando aprender sobre el idioma. Si la iteración explícita es necesaria, está bien.
¿Por qué no iterar a través de la matriz? ¿Cómo espera procesar los contenidos de una matriz sin recorrerla? Incluso si usa un método para hacer esto, seguirá recorriendo la matriz internamente. –
te das cuenta de que cada método que llamaste en el código de tu ejemplo estaba de hecho recorriendo la matriz ... – kgrad
Sí, exactamente, no hay forma de reducir una matriz sin recorrerla ... no habría forma de acceder el contenido. – cdmckay