Comparación de Arrays con Ruby

Trabajando hoy, he tenido que realizar distintas comparaciones entre varios arrays en ruby 2.1.2. Os recopilo las distinas maneras para comparar ya sea con otros arrays u otros valores.

Comparar con valores

Utilizamos la función include?. Preguntamos al array si este incluye un elemento retornando como respuesta true o false.

a = ["a","b","c"]
a.include? "a"         # true

Existen otras opciones como utilizar la función index. Si el valor retornado es nil es que el valor no se encuentra en el array

a = ["a","b","c"]
a.index? "z"         # nil

Esta manera es menos óptima que la anterior, pero también puede resultar útil en determinadas ocasiones.

Dos arrays

En el caso de querer comparar dos arrays la función a utilizar no es tan directa. Para compararlos vamos a aprovechar el uso de operadores básicos y binarios.

Coincidencia de algún valor

Si queremos comprobar si algún valor de un array está contenido en otro, podemos utilizar el operador AND de array:

A = ["a","b","c"]
B = ["c","d","e"]
C = A & B
# C = ["c"]

Podemos aprovechar esto para comparar:

C.empty?
# true si coincide algún valor

Inclusión de un array en otro

Si queremos comprobar que todos los valores de un array están en incluidos en otro, utilizamos el operador resta de array.

En este caso, vamos a comparar si el array A está incluído en B:

A = ["a","b","c"]
B = ["c","d","e"]

(B - A).empty?
# true si a está incluido

Como en el caso anterior, podemos utilizar el operador AND:

(A & B).size == A.size
# true si a está incluido