【问题标题】:A proper way to do this array comparrison in Ruby?在 Ruby 中进行这种数组比较的正确方法是什么?
【发布时间】:2020-07-15 12:56:24
【问题描述】:

如果数组 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。

我想从搜索返回中取出已经在活动中注册的人,但不幸的是 event.a event.b 和 event.c 只是人员的 id,而不是人员的实际实例。因此这一切:

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 

这对数据库来说可能相当繁重,但它是一个不会经常执行的搜索

【问题讨论】:

  • * 什么是“实例”? * 你能用比“qwer”和“asdf”更有意义的东西吗 *你能举个@search_return的例子吗?

标签: arrays ruby include


【解决方案1】:

如果您的任务是“删除 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 >

【讨论】:

    【解决方案2】:

    你想这样做吗?

    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]
    

    【讨论】:

    • 我很感激
    猜你喜欢
    • 2011-04-19
    • 1970-01-01
    • 2022-01-06
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-26
    • 1970-01-01
    相关资源
    最近更新 更多