比较rails中两个对象数组的最佳方法

时间:2012-07-11 07:04:22

标签: ruby comparison

我有两个对象数组,例如:

a1 = [obj1, obj2 , obj3]
a2 = [obj4, obj5, obj6]

每个数组都有不同的同类对象。我想在一次迭代中检查它们是否具有相同的属性值(obj1.att == obj4.att)。

a1.each将在单个数组上进行迭代。我不想使用forwhile循环。我想要一个rails方式来做到这一点。

3 个答案:

答案 0 :(得分:6)

我想在迭代之前检查数组大小是否匹配是有意义的:

same_att = a1.size == a2.size && a1.map(&:att) == a2.map(&:att)

同样的想法,一个懒惰的实现(只有在数组中有很多元素时):

same_att = a1.size == a2.size && a1.lazy.zip(a2).all? { |x, y| x.att == y.att }

答案 1 :(得分:4)

尝试以下

a1.map(&:att) == a2.map(&:att)

编辑     记住以下事情

[1,2,3] == [1,2,3]  #true

[1,2,3] == [2,3,1]  #false

因此,只有在true

时才会返回att attribute of obj1, obj4 AND obj2, obj5 AND obj3, obj6 are same.

答案 2 :(得分:0)

a1.each {|i| a2.sel­ect {|k|  k.att == i.att }}