ruby-on-rails – 如何在ruby / rails中合并两个列表并删除重复
发布时间:2020-12-17 03:40:01 所属栏目:百科 来源:网络整理
导读:我有一个源对象在哪里 class Sourcedef ==(other) return false if self.url == nil || other == nil self.url == other.urlend 我有以下内容: def self.merge_internal_and_external_sources(sources=[],external_sources=[]) (sources + external_sources
我有一个源对象在哪里
class Source def ==(other) return false if self.url == nil || other == nil self.url == other.url end 我有以下内容: def self.merge_internal_and_external_sources(sources=[],external_sources=[]) (sources + external_sources).uniq end 我想合并这两个列表,如果它们已存在于源列表中,则开始从external_sources中踢出项目.我不确定如何雄辩地做到这一点? 我也尝试过: sources | external_sources 但由于我的==比较想在内部比较’url’属性,这会产生一个没有重复删除的结果?例如: [src1] == [src2] # true list = [src1] | [src2] list.size # 2 解决方法
我不确定“merge”是什么意思(数组上没有#merge方法,只有哈希),但你可以像这样简化你的代码:
merged = sources | external_sources 要使它适用于您的类,您还需要两个方法:#hash(实例哈希值,用于初步相等性筛选)和#eql ?,用于确认相等性: class Source def hash url.hash + 1 end # Or delegate it to the url: # require 'active_support/core_ext/module/delegation' # delegate :hash,to: :url def eql? other return false if url.nil? || other.url.nil? url == other.url end end #hash和#eql?是每个班级应该具备的基本设施.添加这些后,#|和#&方法将开始在Source实例的数组上运行. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |