Si a
es la matriz, quiero a.index(a.max)
, pero algo más similar a Ruby. Debería ser obvio, pero estoy teniendo problemas para encontrar la respuesta en eso y en otros lugares. Obviamente, soy nuevo para Ruby.En Ruby, ¿cuál es la forma más limpia de obtener el índice del valor más grande en una matriz?
Respuesta
para Ruby 1.8.7 o superior:
a.each_with_index.max[1]
Se hace una iteración. No es del todo la cosa más semántica, pero si te encuentras haciendo esto mucho, lo envolvería en un método index_of_max
de todos modos.
a = [1, 4 8]
a.inject(a[0]) {|max, item| item > max ? item : max }
por lo menos es como Rubí-:)
En Ruby 1.9.2 Puedo hacer esto;
arr = [4, 23, 56, 7]
arr.rindex(arr.max) #=> 2
Esto es básicamente una versión peor de la solución original no deseada. – MegaTom
Aquí es lo que estoy pensando para responder a esta pregunta: ¿
a = (1..12).to_a.shuffle
# => [8, 11, 9, 4, 10, 7, 3, 6, 5, 12, 1, 2]
a.each_index.max_by { |i| a[i] }
# => 9
que aquí hay una manera de recibir todos los valores del índice de los valores máximos si hay más de uno.
Dado:
> a
=> [1, 2, 3, 4, 5, 6, 7, 9, 9, 2, 3]
Puede encontrar el índice de todos los valores máximos (o cualquier valor dado) por:
> a.each_with_index.select {|e, i| e==a.max}.map &:last
=> [7, 8]
Sólo quería señalar una diferencia de comportamiento y el rendimiento de algunos de las soluciones aquí. El "desempate" comportamiento de duplicar elementos max:
a = [3,1,2,3]
a.each_with_index.max[1]
# => 3
a.index(a.max)
# => 0
Por curiosidad a los dos corriendo en Benchmark.bm
(para el a
arriba):
user system total real
each_with_index.max 0.000000 0.000000 0.000000 ( 0.000011)
index.max 0.000000 0.000000 0.000000 ( 0.000003)
Entonces me genera un nuevo a
con Array.new(10_000_000) { Random.rand }
y volvió a ejecutar la prueba:
user system total real
each_with_index.max
2.790000 0.000000 2.790000 ( 2.792399)
index.max 0.470000 0.000000 0.470000 ( 0.467348)
Esto me hace pensar menos específicamente debe elegir el índice más alto max, a.index(a.max)
es la mejor opción.
- 1. ¿Cuál es la forma más limpia de obtener una suma de comprobación de una matriz multidimensional?
- 2. Devuelve el índice del valor más alto en una matriz
- 3. PHP: ¿La forma más limpia de modificar una matriz multidimensional?
- 4. ¿Cuál es la forma más limpia de obtener la suma de números en una colección/lista en Dart?
- 5. Ruby: ¿Cuál es la forma más fácil de eliminar el primer elemento de una matriz?
- 6. ¿Cuál es la forma más rápida de aplicar t.test a cada columna de una matriz grande?
- 7. ¿Cuál es la forma más fácil de obtener una clave con el valor más alto de un hash en Perl?
- 8. Dada una matriz de booleanos, ¿cuál es la forma más eficiente de seleccionar el índice de un valor TRUE aleatorio?
- 9. ¿Cuál es la forma más limpia de hacer una clasificación más uniq en una lista de Python?
- 10. ¿Cuál es la forma más limpia de escribir una cadena multilínea en JavaScript?
- 11. Encuentra el valor más grande más pequeño que x en una matriz ordenada
- 12. ¿Cuál es la consulta SQL más simple para encontrar el segundo valor más grande?
- 13. Forma más Ruby para obtener una matriz que contiene valores específicos de una matriz de objetos?
- 14. ¿Cuál es la forma más limpia de escribir un ciclo sin bloqueo en javascript?
- 15. ¿Cuál es la forma más limpia de conectar automáticamente Spring Beans en un JSP?
- 16. Número más grande y más pequeño en una matriz
- 17. La forma más rápida de obtener el máximo valor de un Rango exclusivo en ruby
- 18. ¿Cómo obtendría el índice del valor más bajo en una matriz int?
- 19. ¿Cuál es la forma más elegante de encontrar el índice de elementos duplicados en C# List
- 20. Buscar la clave/índice más alto en una matriz
- 21. ¿Cuál es la forma más limpia de mostrar un objeto java.util.Calendar en JSF?
- 22. ¿Cuál es la forma más limpia de simular pass-by-reference en Actionscript 3.0?
- 23. ¿Cuál es la forma más eficiente de obtener el primer día del mes actual?
- 24. ¿Cuál es la mejor/más limpia forma de implementar las pruebas A-B en asp.net mvc?
- 25. ¿Cuál es la forma más concisa de obtener el inverso de un valor booleano de Java?
- 26. ¿Una función es más grande que una matriz?
- 27. ¿Cuál es la forma más rápida de eliminar una carpeta grande en Windows?
- 28. ¿Cuál es la forma más limpia de ordenar los resultados de la consulta "describir la tabla"?
- 29. ¿La manera más limpia de buscar una matriz 2D?
- 30. ¿Cuál es la forma más rápida de obtener el valor absoluto de un número
Creo que lo tienes. Lo que no es rubí sobre eso? – Ben
Ben, estaba buscando algo así como a.max_index. Supongo que no está integrado. –
Incluso si la función que desea no está incorporada, puede agregar un miembro '.max_index' a la clase' Array'. Aquí hay un ejemplo de la extensión de 'String' o' Integer' con un miembro personalizado: http://www.hawkee.com/snippet/1260/ – bta