Busqué en Google esto y obtuve opiniones irregulares / contradictorias: ¿hay realmente alguna diferencia entre hacer un mapy hacer un collecten una matriz en Ruby / Rails?
Los documentos no parecen sugerir ninguno, pero ¿hay quizás diferencias en el método o el rendimiento?

mapse prefiere en Code Golf .mapse prefiere en CodeGolf, lo que puede no ser obvio para todos: es solo porquecollecttiene cuatro caracteres másmap, pero la misma funcionalidad.collectmás legible y natural: la idea de 'recopilar' registros y hacerles X tiene más sentido natural para mí que 'mapear' registros y hacerles X.Respuestas:
No hay diferencia, de hecho,
mapse implementa en C comorb_ary_collectyenum_collect(por ejemplo, hay una diferencia entremapuna matriz y cualquier otra enumeración, pero no hay diferencia entremapycollect).¿Por qué ambos
mapycollectexisten en Ruby? Lamapfunción tiene muchas convenciones de nomenclatura en diferentes idiomas. Wikipedia proporciona una descripción general :Ruby proporciona un alias para que los programadores del mundo Smalltalk se sientan más en casa.
¿Por qué hay una implementación diferente para matrices y enumeraciones? Una enumeración es una estructura de iteración generalizada, lo que significa que no hay forma de que Ruby pueda predecir cuál puede ser el siguiente elemento (puede definir enumeraciones infinitas, consulte Prime para ver un ejemplo). Por lo tanto, debe llamar a una función para obtener cada elemento sucesivo (generalmente este será el
eachmétodo).Las matrices son la colección más común, por lo que es razonable optimizar su rendimiento. Dado que Ruby sabe mucho sobre cómo funcionan las matrices, no tiene que llamar,
eachpero solo puede usar la manipulación de puntero simple, que es significativamente más rápido.Existen optimizaciones similares para varios métodos de matriz como
zipocount.fuente
count,lengthosize. Diferentes palabras para el mismo atributo de una matriz, pero con esto, Ruby le permite elegir la palabra más apropiada para su código: ¿desea la cantidad de elementos que está recopilando, la longitud de una matriz o el tamaño actual de la estructura. Esencialmente, son todos iguales, pero elegir la palabra correcta puede hacer que su código sea más fácil de leer, lo cual es una buena propiedad del lenguaje.Me han dichoque son lo mismo.En realidad, están documentados en el mismo lugar en ruby-doc.org:
http://www.ruby-doc.org/core/classes/Array.html#M000249
fuente
Hice una prueba de referencia para intentar responder esta pregunta, luego encontré esta publicación, así que aquí están mis hallazgos (que difieren ligeramente de las otras respuestas)
Aquí está el código de referencia:
Y los resultados que obtuve fueron:
¿Quizás un alias no es gratis?
fuente
Los métodos
collectycollect!son alias demapymap!, por lo que se pueden usar indistintamente. Aquí hay una manera fácil de confirmar eso:fuente
Ruby alias el método Array # map to Array # collect; Se pueden usar indistintamente. (Monje rubí)
En otras palabras, el mismo código fuente:
http://ruby-doc.org/core-2.2.0/Array.html#method-i-map
fuente