Как я могу проверить, содержит ли массив Ruby одно из нескольких значений?

Если вам нужен префикс, который вам может понравиться

 for ((i=7;i<=12;i++)); do echo `printf "%2.0d\n" $i |sed "s/ /0/"`;done

, который даст

07
08
09
10
11
12
29
задан Colen 8 April 2010 в 22:30
поделиться

4 ответа

Установите пересечение их:

a1 & a2

Вот пример:

> a1 = [ 'foo', 'bar' ]
> a2 = [ 'bar', 'baz' ]
> a1 & a2
=> ["bar"]
> !(a1 & a2).empty? # Returns true if there are any elements in common
=> true
81
ответ дан linesarefuzzy 8 April 2010 в 22:30
поделиться

Использование пересечения выглядит красиво, но неэффективно. Я бы использовал "любой?" на первом массиве (так что итерация останавливается, когда один из элементов найден во втором массиве). Кроме того, использование Set во втором массиве сделает проверку членства быстрой. т.е. :

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
4
ответ дан Galactus 8 April 2010 в 22:30
поделиться

Попробуйте это

a1 = [ 'foo', 'bar' ] 
a2 = [ 'bar', 'baz' ]
a1-a2 != a1
true
0
ответ дан Rahul Patel 8 April 2010 в 22:30
поделиться

Что-нибудь общее? Вы можете использовать оператор пересечения: & amp;

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

Если вы ищете полное пересечение, однако (с дубликатами) проблема более сложная, здесь уже переполнение стека: Как вернуть пересечение массива Ruby с дублирующимися элементами? (проблема с биграммами в коэффициенте кости)

Или быстрый фрагмент , который определяет «real_intersection» и проверяет следующий тест

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
7
ответ дан Community 8 April 2010 в 22:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: