Ok, supongo que tengo una matriz como [[z, 1], [d, 3], [e, 2]], ¿cómo puedo ordenar esta matriz por segundo elemento de cada conjunto constituyente? ¿Para que mi matriz se vea como la siguiente? [[z, 1], [e, 2], [d, 3]]?Ordenar una matriz bidimensional por segundo valor
Respuesta
arr = [[:z,1], [:d,3], [:e,2]]
arr.sort {|a,b| a[1] <=> b[1]}
# => [[:z, 1], [:e, 2], [:d, 3]]
O como usuario Puntos @Phrogz a cabo, si las matrices internas tienen exactamente dos elementos cada uno:
arr.sort_by{|x,y|y} # => [[:z, 1], [:e, 2], [:d, 3]]
arr.sort_by(&:last) # => [[:z, 1], [:e, 2], [:d, 3]]
O más simplemente: 'arr.sort_by {| s, n | n} 'o incluso' arr.sort_by (&: last) '(en Ruby 1.9). – Phrogz
'arr.sort_by (&: last)' funciona en Ruby 1.8.7 también. –
@Phrogz Prefiero 'sort' porque en ruby 2.4 (desde 2.0 de hecho o incluso antes)' sort_by' no existe, pero solo 'sort_by!' Y el [doc] (https://ruby-doc.org/ core-2.4.0/Array.html # method-i-sort_by-21) dice que: _El resultado no está garantizado como estable. Cuando dos teclas son iguales, el orden de los elementos correspondientes es impredecible. Por lo tanto, para usar 'sort_by!' Debe tener claves uniq. So @maerics edite su publicación para decir eso o elimine 'sort_by'. – noraj
Como maerics usuario responderla ofrece respuesta ascendente sorting.This es muy útil para mí, gracias. Para la clasificación descendente yo uso -
arr = [[:z,1], [:d,3], [:e,2]]
arr.sort {|a,b| a[1] <=> b[1]}.reverse
#=> [[:d, 3], [:e, 2], [:z, 1]]
Puede guardar la llamada "inversa" simplemente haciendo 'arr.sort {| a, b || b [1] <=> a [1]} '(observe el orden inverso de los operandos del operador de comparación). – maerics
tiene un error tipográfico en su código, el código correcto es 'arr.sort {| a, b | b [1] <=> a [1]} '. ha insertado demasiado un personaje de pipa – Fred
- 1. ¿Cómo ordenar una matriz (asociativa) por valor?
- 2. Ordenar una matriz bidimensional basado en una columna
- 3. Ordenar una lista de tuplas por segundo artículo (valor entero)
- 4. ¿Cómo puedo ordenar una matriz bidimensional en C#?
- 5. Ordenar matriz por valor alfabéticamente php
- 6. push() una matriz bidimensional
- 7. PHP Ordenar matriz por subarreglo Valor
- 8. ordenar por matriz numérica()
- 9. Ordenar una ConcurrentDictionary por valor
- 10. jquery creando una matriz bidimensional
- 11. buscar una matriz bidimensional en java
- 12. Ordenar una matriz por el valor de una matriz secundaria en PHP
- 13. matriz bidimensional en ios
- 14. matriz bidimensional de diferentes tipos
- 15. ¿Por qué es peor inicializar una matriz bidimensional como esta?
- 16. Numpy: ordenar una matriz multidimensional por una matriz multidimensional
- 17. Scala: ¿cómo puedo ordenar una matriz de tuplas por su segundo elemento?
- 18. 2 lista matriz bidimensional
- 19. matriz bidimensional en python
- 20. ordenar una matriz por posición relativa
- 21. ¿Ordenar una matriz multidimensional por cadena?
- 22. Rotar una matriz bidimensional en 90 grados
- 23. Inicializar una gran matriz bidimensional en C++
- 24. Ordenar una matriz relacionada con otra matriz
- 25. Encontrar vecinos en una matriz bidimensional
- 26. inicialización de una matriz bidimensional de cadenas
- 27. Php empujando valores a una matriz bidimensional
- 28. ¿Obtienes elementos adyacentes en una matriz bidimensional?
- 29. PHP - Ordenar matriz multidimensional por otra matriz
- 30. Ordenar una matriz por claves basadas en otra matriz?
Tenga en cuenta que esto es realmente una matriz de matrices, no una matriz de 2 dimensiones. – Phrogz
posible duplicado de [Ordene una colección de objetos por número (el más alto primero) luego por letra (alfabéticamente)] (http://stackoverflow.com/questions/2232470/sort-a-collection-of-objects-by-number- primero-primero-luego-por-letra-alfabético) –