Combinar e intercalar dos matrices en Ruby

Tengo el siguiente código:

a = ["Cat", "Dog", "Mouse"]
s = ["and", "&"]

Quiero combinar la matriz s en la matriz a que me daría:

["Cat", "and", "Dog", "&", "Mouse"]

Buscando en los documentos de Ruby Array y Enumerable, no veo un método que haga esto.

¿Hay alguna manera de hacer esto sin iterar a través de cada matriz?

Solución

Puedes hacerlo con:

a.zip(s).flatten.compact
Comentarios (12)

Esto no dará como resultado un array en el orden que Chris pidió, pero si el orden del array resultante no importa, puede usar a |= b. Si no quieres mutar a, puedes escribir a | b y asignar el resultado a una variable.

Consulta la documentación sobre la unión de conjuntos para la clase Array en http://www.ruby-doc.org/core/classes/Array.html#M000275.

Esta respuesta asume que no quieres elementos de array duplicados. Si quieres permitir elementos duplicados en tu array final, a += b debería ser suficiente. De nuevo, si no quieres mutar a, usa a + b y asigna el resultado a una variable.

En respuesta a algunos de los comentarios de esta página, estas dos soluciones funcionan con arrays de cualquier tamaño.

Comentarios (3)

No es precisamente elegante, pero funciona con matrices de cualquier tamaño:

>> a.map.with_index { |x, i| [x, i == a.size - 2 ? s.last : s.first] }.flatten[0..-2] 
#=> ["Cat", "and", "Dog", "&", "Mouse"]
Comentarios (2)