たとえば、オブジェクトの配列が2つあります。
a1 = [obj1, obj2 , obj3]
a2 = [obj4, obj5, obj6]
各配列には、同じクラスの異なるオブジェクトがあります。obj1.att == obj4.att
1回の反復で同じ属性値()を持っているかどうかを確認したいと思います。
a1.each
単一の配列で反復を行います。for
使用したりwhile
ループしたりしたくありません。私はそれを行うためのレールの方法が欲しいです。
たとえば、オブジェクトの配列が2つあります。
a1 = [obj1, obj2 , obj3]
a2 = [obj4, obj5, obj6]
各配列には、同じクラスの異なるオブジェクトがあります。obj1.att == obj4.att
1回の反復で同じ属性値()を持っているかどうかを確認したいと思います。
a1.each
単一の配列で反復を行います。for
使用したりwhile
ループしたりしたくありません。私はそれを行うためのレールの方法が欲しいです。
反復する前に配列のサイズが一致することを確認するのは理にかなっていると思います。
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 }
フォローしてみてください
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.
a1.each {|i| a2.select {|k| k.att == i.att }}