Creé este método para encontrar la palabra más larga en una matriz, pero me pregunto si hay una mejor manera de hacerlo. Soy bastante nuevo para Ruby, y lo hice como ejercicio para aprender el método inject
.Ruby palabra más larga en matriz
Devuelve la palabra más larga en una matriz o una matriz de las palabras iguales más largas.
class Array
def longest_word
# Convert array elements to strings in the event that they're not.
test_array = self.collect { |e| e.to_s }
test_array.inject() do |word, comparison|
if word.kind_of?(Array) then
if word[0].length == comparison.length then
word << comparison
else
word[0].length > comparison.length ? word : comparison
end
else
# If words are equal, they are pushed into an array
if word.length == comparison.length then
the_words = Array.new
the_words << word
the_words << comparison
else
word.length > comparison.length ? word : comparison
end
end
end
end
end
si está seguro de que solo tiene cadenas, puede escribirlo como 'self.group_by (& length) .max.last'; de lo contrario, necesitaría una llamada' to_s' adicional como 'self.group_by {| el | el.to_s .size} .max.last'. Y finalmente, para devolver una sola cadena cuando solo tiene un elemento, puede hacer 'longest_word.size> 1? longest_word: longest_word.first' antes de regresar. –
¡Agradable! Me tomé la libertad de hacer que el código sea más conciso, pero revertir si no te gusta el estilo –
El OP dijo en la pregunta que lo hizo para aprender a 'inyectar', y no está del todo claro si estaba buscando para una mejor manera de usar 'inyectar' o simplemente un mejor período de manera. La suya es una respuesta bastante buena para la segunda interpretación y la de @Mladen Jablanović para la primera. Ambos obtienen mi +1. –