Правильный способ сделать сравнение этого массива в Ruby? - PullRequest
0 голосов
/ 03 апреля 2020

если массив a содержит какие-либо числа, также найденные в массиве b, я хочу, чтобы они ушли от a.

if b.any?
  b.each do |asdf|
    if a.include?(asdf)
      a = a - [asdf]
    end
  end
end

Это самый эффективный способ сделать это?

ОБНОВЛЕНИЕ:

Ответы хорошие, но я понял, что поиск возвращает массив экземпляров People, @search_return. Моя проблема в том, что у меня есть 3 массива идентификаторов (целых чисел): @ event.a, @ event.b и @ event. c, которые являются идентификаторами людей, которые уже зарегистрировались в этом событии в некоторой емкости.

Я хочу вывести людей, которые уже зарегистрированы на мероприятии, из результатов поиска, но, к сожалению, event.a event.b и event. c - это просто идентификаторы людей, а не фактические экземпляры. людей. отсюда все это:

if instance.a.any?
  instance.a.each do |asdf|
    qwer = Qwer.find(asdf)
    if @search_return.include?(qwer)
      @search_return = @search_return - [qwer]
    end
  end
end  

if instance.b.any?
  instance.b.each do |asdf|
    qwer = Qwer.find(asdf)
    if @search_return.include?(qwer)
      @search_return = @search_return - [qwer]
    end
  end
end 

if instance.c.any?
  instance.c.each do |asdf|
    qwer = Qwer.find(asdf)
    if @search_return.include?(qwer)
      @search_return = @search_return - [qwer]
    end
  end
end 

, что может быть довольно тяжелым для базы данных, но это поиск, который не будет выполняться слишком часто

Ответы [ 2 ]

1 голос
/ 03 апреля 2020

Если ваша задача «удалить все элементы в a , которые также существуют в b », то вы можете просто вычесть их:

2.6.3 :002 > a = [1, 2, 3, 4]
 => [1, 2, 3, 4]
2.6.3 :003 > b = [2, 3]
 => [2, 3]
2.6.3 :004 > c = a - b
 => [1, 4]
2.6.3 :005 >
1 голос
/ 03 апреля 2020

Вы хотите сделать это?

irb(main):001:0> b = [1,2,3]
=> [1, 2, 3]
irb(main):002:0> a = [4,5,3]
=> [4, 5, 3]
irb(main):003:0> a - b
=> [4, 5]

Или, может быть, это?

a | b
=> [4, 5, 3, 1, 2]
...