rails not metodo array ruby string arrays intersect

not - ¿Cómo puedo verificar si una matriz de Ruby incluye uno de varios valores?



ruby in array (4)

¿Algún valor en común? puede utilizar el operador de intersección: &

[ 1, 1, 3, 5 ] & [ 1, 2, 3 ] #=> [ 1, 3 ]

Sin embargo, si está buscando una intersección completa (con duplicados) el problema es más complejo, ya hay un desbordamiento de pila aquí: ¿Cómo devolver una intersección de matriz Ruby con elementos duplicados? (problema con bigramas en el coeficiente de dados)

O un snippet código rápido que define "real_intersection" y valida la siguiente prueba

class ArrayIntersectionTests < Test::Unit::TestCase def test_real_array_intersection assert_equal [2], [2, 2, 2, 3, 7, 13, 49] & [2, 2, 2, 5, 11, 107] assert_equal [2, 2, 2], [2, 2, 2, 3, 7, 13, 49].real_intersection([2, 2, 2, 5, 11, 107]) assert_equal [''a'', ''c''], [''a'', ''b'', ''a'', ''c''] & [''a'', ''c'', ''a'', ''d''] assert_equal [''a'', ''a'', ''c''], [''a'', ''b'', ''a'', ''c''].real_intersection([''a'', ''c'', ''a'', ''d'']) end end

Tengo dos matrices de Ruby y necesito ver si tienen valores en común. Podría simplemente recorrer cada uno de los valores en una matriz e incluir? () En la otra, pero estoy seguro de que hay una mejor manera. ¿Qué es? (Las matrices mantienen cadenas).

Gracias.


El uso de la intersección se ve bien, pero es ineficiente. Yo usaría "alguna?" en la primera matriz (de modo que la iteración se detiene cuando uno de los elementos se encuentra en la segunda matriz). Además, el uso de un Conjunto en la segunda matriz hará que los controles de membresía sean más rápidos. es decir:

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


Prueba esto

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


El conjunto los intersecta :

a1 & a2

Aquí hay un ejemplo:

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