DigitalRossが既に述べたように、これはO(n^2)であるため、これは非常に遅いです。それを仮定すると?代わりに、あなたは、インデックスを構築し、その代わりに、それはO(N + M)になるだろうことを反復処理することができ、==あなたのためだけのように罰金です:
array1 = [obj1, obj2, obj3, obj4]
array2 = [obj1, obj2, obj5, obj6]
index = {}
found = []
array1.each do |item1| index[item1.first(2)] = item1 end
array2.each do |item2|
item1 = index[item2.first(2)]
found << [item1,item2] if item1 then
end
found.each do |item1, item2| puts "do something" end
これは最初の2つの要素の組み合わせを想定していますarray1内のすべての要素のうちarray1内で一意です。あなたが任意のサンプルデータを提供しなかったので、私は、コードをテストしていない
array1 = [obj1, obj2, obj3, obj4]
array2 = [obj1, obj2, obj5, obj6]
index = {}
found = []
array1.each do |item1|
key = item1.first(2)
index[key] ||= []
index[key] << item1
end
array2.each do |item2|
items_from_1 = index[item2.first(2)]
if items_from_1 then
found.concat(items_from_1.map { |item1| [item1,item2] })
end
end
found.each do |item1, item2| puts "do something" end
:付属していない場合、コードは少し複雑になります。
私は役立つことを願っています。マップや交差点を組み合わせる
はい、それは遅く、具体的には2次です。しかし、問題は2つの外側のループであり、内側のテストではないことに注意してください。 – DigitalRoss
私は外側の配列の各要素の内側の配列をループする必要がない方法があることを期待していました。 – Josh