在 Ruby 中进行此数组比较的正确方法?

A proper way to do this array comparrison in Ruby?

如果数组 a 包含数组 b 中也存在的任何数字,我希望它们从 a 中消失。

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

这是最有效的方法吗?

更新:

答案很好,但我意识到搜索会返回一组 People 实例,@search_return。我的问题是我有 3 个 id 数组(整数):@event.a、@event.b 和 @event.c,它们是已经在某些活动中注册的人的 id容量。

我想从搜索中取出已经注册的人return,但不幸的是event.aevent.b和event.c只是ids人民,而不是人民的实际情况。因此这一切:

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 

这可能对数据库造成很大负担,但不会经常执行此搜索

你想这样做吗?

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]

如果你的任务是"remove all elements in a that also exist in 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 >