由于你提到一行,这里的功能是:
merged = Hash[ a1.map{|o| [o.id,o]} ].merge(Hash[ a2.map{|o| [o.id,o]} ]).values
这把两个阵列都转换成由<代码>id钥匙的斜体,将其合并(从<代码>a2中超过<代码>a1的数值,然后仅提取数值。
如果你再与这些物体做许多类似的工作,我建议你界定<条码>以下l?和<条码>hash,以比较它们的<条码>id数值,然后使用内联网 rel=“nofollow”<条码>><<<>><<>>>><>>>>><>>>>>>>>>>>>>>>>>>>>>>>>>>>>><>>>><>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 班级:
require set
Foo = Struct.new(:id,:name) do
def eql?(o2)
id==o2.id
end
def hash
id.hash
end
end
a1 = Set[ Foo.new(1,"Phrogz"), Foo.new(17,"Cat") ]
a2 = Set[ Foo.new(42,"Arthur"), Foo.new(1,"Gavin") ]
all = a1 + a2
all.each{ |foo| puts foo }
#=> #<struct Foo id=1, name="Phrogz">
#=> #<struct Foo id=17, name="Cat">
#=> #<struct Foo id=42, name="Arthur">