我正在使用Rails 4.2.7。我有兩個數組(arr1和arr2),都包含我的模型對象。如果arr1中的對象有一個匹配arr2中的對象的字段「myfield1」(這是一個數字),是否有辦法在兩個數組上執行交集?這兩個數組都將具有唯一的一組對象。目前,我有在Rails中,如何基於數組中每個對象中的字段執行兩個數組的相交?
arr1.each_with_index do |my_object, index|
arr2.each_with_index do |my_object2, index|
if my_object.myfield1 == my_object2.myfield1
results.push(my_object)
end
end
end
但這讓我覺得有點低效。我認爲有一種更簡單的方法可以獲得我需要的結果,但是在Ruby中我不夠精通,無法知道如何去做。
http://ruby-doc.org/ core-1.9.3/Array.html#method-i-26 – bjhaid
將每個數組轉換爲一個散列,並將字段作爲鍵。例如:'hash1 = arr1.each_with_object({}){| x,hsh | hsh [x.field] = x}; hash2 = arr2.each_with_object({}){| x,hsh | hsh [x.field] = x}'並做'(hash1.keys&hash2.keys).map {| x | hash1 [x] || hash2 [x]}' – bjhaid