Ruby从实例变量中扣除了与其他值相同的值

时间:2013-01-31 14:30:24

标签: ruby-on-rails ruby instance-variables

我有两个实例值:@a和@b,有类似哈希的.... (将解释伪示例) 例如在@a我有:

*Field1 | Field2 | Field3*

CONTITECH | CT942K1 | 123
CONTITECH | CT722K1 | 123
ATE | AB2123 | 123

在@b我有:

CONTITECH | CT942K1 | 456
BREMBO | TE132 | 123

怎么做@c = @a - @b只包含不在@b中的值?

例如@c = @a - @b将包含:

CONTITECH | CT722K1 | 123
ATE | AB2123 | 123

因此,只有当2个字段相同时,我必须从@b ...

中的@a相同值中删除

如果不通过示例清楚,请写入评论....我需要的是从@a中删除@a所有相同的(field1和field2)条目... 怎么做?

如果这会有帮助:代码: 这是@b(@articles):

@articles = Article.find(:all, :conditions => ["ART_ID in (?) ", @search.map(&:ARL_ART_ID)])

和@a(@non_original):

@non_original = []
    nr_condition = "*" + art_nr.to_s.gsub(/[^0-9A-Za-z]/, '').upcase + "*"
    if art_nr.length > 3
      art = search_not_oem(art_nr)
      @search = CrossList.find(:all, :conditions => ['MATCH (cross_value) AGAINST (? IN BOOLEAN MODE)', nr_condition])
      if @search.present?
        @prlist = PriceList.where("id IN (?)", @search.map(&:price_list_id))
        if  @prlist.present?
          @prlist.each do |p|
            #@all_supp = Supplier.all
            #if @all_supp.find{|item| item.SUP_BRAND.gsub(/[^0-9A-Za-z]/, '').include?(p.brand.gsub(/[^0-9A-Za-z]/, '').upcase)} && art.present?
            #  logger.warn("!!!!!! if")
            #else
              @non_original << p
            #end                  
          end
        end
      end
    end
@non_original

我需要的是@res = @non_original - @articles,确定他们有不同的字段,但有相同的数据......

1 个答案:

答案 0 :(得分:0)

试试这个:

@res = @non_original.reject do |obj|
  @articles.any? {|art| art.field1 == obj.field1 && art.field2 == obj.field2 }
end

@res@non_original匹配field1中任何元素的对象外,field2中的所有对象都应放入@articles@res中的对象与@non_original的类型相同 - 即PriceList