3

たとえば、オブジェクトの配列が2つあります。

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

各配列には、同じクラスの異なるオブジェクトがあります。obj1.att == obj4.att1回の反復で同じ属性値()を持っているかどうかを確認したいと思います。

a1.each単一の配列で反復を行います。for使用したりwhileループしたりしたくありません。私はそれを行うためのレールの方法が欲しいです。

4

3 に答える 3

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 }
于 2012-07-11T07:49:33.250 に答える
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.

于 2012-07-11T07:14:12.603 に答える
0
a1.each {|i| a2.sel­ect {|k|  k.att == i.att }}
于 2012-07-11T07:19:06.267 に答える