Question

J'ai deux tableaux Ruby, et je dois voir s'ils ont des valeurs en commun. Je pourrais boucle à travers chacune des valeurs dans un tableau et ne comprennent? () Sur l'autre, mais je suis sûr qu'il ya une meilleure façon. Qu'Est-ce que c'est? (Les tableaux les deux chaînes détiennent.)

Merci.

Était-ce utile?

La solution

Set intersecte les:

a1 & a2

Voici un exemple:

> a1 = [ 'foo', 'bar' ]
> a2 = [ 'bar', 'baz' ]
> a1 & a2
=> ["bar"]
> !(a1 & a2).empty? # Returns true if there are any elements in common
=> true

Autres conseils

En utilisant l'intersection est joli, mais il est inefficace. J'utiliser « tout? » sur le premier réseau (de sorte que l'itération arrête lorsque l'un des éléments se trouve dans le second réseau). De plus, en utilisant un ensemble sur le deuxième réseau fera des contrôles d'adhésion rapide. i.e.:.

a = [:a, :b, :c, :d]
b = Set.new([:c, :d, :e, :f])
c = [:a, :b, :g, :h]

# Do a and b have at least a common value?
a.any? {|item| b.include? item}
# true

# Do c and b have at least a common value?
c.any? {|item| b.include? item}
#false

Essayer cette

a1 = [ 'foo', 'bar' ] 
a2 = [ 'bar', 'baz' ]
a1-a2 != a1
true
scroll top