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

3

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

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

每个数组都有相同类的不同对象。我想在一个迭代中检查它们是否具有相同的属性值(obj1.att == obj4.att)。 a1.each 将对单个数组进行迭代。我不想使用 forwhile 循环。我希望用 Rails 的方式来完成。

8
这方面没有所谓的“Rails方式”,也许可以考虑“Ruby方式”。 - tokland
3个回答

7
我猜在迭代之前检查数组大小是否匹配是有意义的:
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 }

4
尝试以下操作:
a1.map(&:att) == a2.map(&:att)

编辑 请记住以下几点:

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

AND

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

因此,仅当obj1、obj4和obj2、obj5以及obj3、obj6的att属性相同时,它才会返回true。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接