Ruby消除了数组中的对象重复

时间:2014-06-02 15:40:18

标签: ruby-on-rails ruby arrays

我正在努力合并三个阵列,同时消除重复,并想知道是否有一个简短的方法来做到这一点。假设我有两个包含人物对象的数组,它们具有firstnamelastname属性。

我现在想要将这两个数组合并为一个包含所有唯一人的新数组。因此,应该只有一个John Doe,但John PaulFred Paul都可以。我希望这个问题足够清楚?谢谢!

3 个答案:

答案 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#|。因此,对于三个数组arr1arr2arr3,则集合联合为arr1 | arr2 | arr3