Ruby on rails Ruby从实例变量中扣除其他变量中相同的值
我有两个实例值:@a和@b,它们是散列值,如。。。。 (将解释伪示例) 例如在@a中,我有:Ruby on rails Ruby从实例变量中扣除其他变量中相同的值,ruby-on-rails,ruby,instance-variables,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将包含: CONTITEC
*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
所以只有当两个字段相同时,我必须从@b中删除相同的值
如果不清楚的例子,写在评论。。。。我需要的是从@a中删除@b中相同的(field1和field2)条目。。。
如何做到这一点
如果这有帮助:代码:
这是@b(@articles):
和@a(@非原作者):
@非原创=[]
nr_-condition=“*”+零件编号至第gsub(/[^0-9A-Za-z]/,”).upcase+“*”
如果艺术长度>3
艺术=搜索\u非\u oem(艺术\u编号)
@search=CrossList.find(:all,:conditions=>['MATCH(cross\u value)对(?IN BOOLEAN MODE'),nr\u condition])
如果@search.present?
@prlist=PriceList.where(“id IN(?),@search.map(&:price\u list\u id))
如果@prlist.present?
@prlist.each do| p|
#@all_supp=供应商。全部
#如果@all_supp.find{| item | item.supp_BRAND.gsub(/[^0-9A-Za-z]/,'')。包括?(p.BRAND.gsub(/[^0-9A-Za-z]/,'')。upcase)&&art.present?
#记录器。警告(“!!!!!!!如果”)
#否则
@非原创试试这个:
@res = @non_original.reject do |obj|
@articles.any? {|art| art.field1 == obj.field1 && art.field2 == obj.field2 }
end
除了那些字段1
和字段2
与@文章
中的任何元素相匹配的对象之外,应该将@非原始
中的所有对象放入@res
中。@res
中的对象的类型将与@非原创的
相同-也就是说,价格表
而不是伪代码,为什么不给出设置@a和@b的实际ruby代码以及b的结果呢?@Frederickhueng您将在那里看到什么?一切都在db中?此外,代码非常庞大,不会显示任何内容。@非原创
似乎包含价格表
对象,而@articles
包含文章
s。你想减法怎么用?@Chowlett我知道,这是个问题!从一个或另一个具有相同值的对象中删除@Chowlett仅当articles field1和field2值与非原始ffield1和ffield2相同时,从非原始对象中删除此行…是的,操作系统良好。。。。只是我还需要一些东西来编辑。。。但第一眼看上去不错
@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.reject do |obj|
@articles.any? {|art| art.field1 == obj.field1 && art.field2 == obj.field2 }
end