我正在努力合并三个阵列,同时消除重复,并想知道是否有一个简短的方法来做到这一点。假设我有两个包含人物对象的数组,它们具有firstname
和lastname
属性。
我现在想要将这两个数组合并为一个包含所有唯一人的新数组。因此,应该只有一个John Doe
,但John Paul
和Fred Paul
都可以。我希望这个问题足够清楚?谢谢!
答案 0 :(得分:5)
您可以连接数组并在结果数组上调用#uniq
:
(ary1 + ary2 + ary3).uniq { |person| [person.firstname, person.lastname] }
或者,如果Person
类实现了等式方法#==
,那么你可以使用它:
class Person
# ...
def ==(other)
firstname == other.firstname && lastname == other.lastname
end
end
(ary1 + ary2 + ary3).uniq
请参阅Array#uniq
。
答案 1 :(得分:1)
您可以使用Array#uniq
方法吗?
http://www.ruby-doc.org/core-2.1.2/Array.html#method-i-uniq
编辑:对不起,错过了three arrays
位。假设您已将所有数组存储在名为“@arrays”的变量中,那么您可以执行
@arrays.inject{|a,b| a + b}.uniq
或者,如果您更喜欢某些更具体的数组名称
(@array1 + @array2 + @array3).uniq
答案 2 :(得分:0)
使用执行set union的Array#|
。因此,对于三个数组arr1
,arr2
,arr3
,则集合联合为arr1 | arr2 | arr3
。