ruby - rails - ¿Cómo alfabetizo una matriz ignorando el caso?
ruby sort desc (3)
En general, sort_by no es eficiente para claves que son simples de calcular. Una comparación más eficiente es utilizar sort con un bloque y reemplazar el operador de comparación predeterminado <=> con casecmp
wordlist.sort { |w1, w2| w1.casecmp(w2) }
Para obtener más información sobre las ganancias de eficiencia, consulte la documentación oficial de Ruby para el método sort_by: http://www.ruby-doc.org/core-2.1.2/Enumerable.html#method-i-sort_by
Estoy usando Learn to Program de Chris Pine y estoy perplejo en su desafío relativamente simple de tomar la entrada del usuario en forma de una lista de palabras aleatorias y luego alfabetizarlas en una matriz. Las preguntas sobre este desafío han aparecido antes, pero no he podido encontrar mi pregunta específica en SO, entonces lo siento si es un duplicado.
puts "Here''s a fun trick. Type as many words as you want (one per line) and
I''ll sort them in...ALPHABETICAL ORDER! Hold on to your hats!"
wordlist = Array.new
while (userInput = gets.chomp) != ''''
wordlist.push(userInput)
end
puts wordlist.sort
Si bien esto funciona, estoy tratando de averiguar cómo alfabetizar la matriz sin sensibilidad a mayúsculas y minúsculas. Esto es difícil de entender. Aprendí sobre casecmp
pero parece ser un método para comparar una cadena específica, en oposición a una matriz de cadenas.
Hasta ahora he estado intentando cosas como:
wordlist.to_s.downcase.to_a.sort!
lo cual, además de verse mal, no funciona por múltiples razones, incluyendo que Ruby 2.0 no permite que las cadenas se conviertan en matrices.
Qué tal si:
wordlist.sort_by { |word| word.downcase }
O incluso más corto:
wordlist.sort_by(&:downcase)
Tenía la misma pregunta en mi bootcamp de codificación de Ruby. Esto es lo que funcionó para mí:
puts "Type in a sentence."
sentence = gets.chomp.downcase
puts sentence.split(" ").sort