有沒有更好的方法來做到這一點? 我有散列值的兩個陣列,以及我想獲得散列的陣列,其中所述天重疊,與版本設置爲交叉點(即version1_for_arr1 & & version1_for_arr2)。處理陣列內部的哈希
ARR1是
[{:day=>day1, :version1=>true, :version2=>false, :version3=>true},
{:day=>day3, :version1=>false, :version2=>false, :version3=>true},
{:day=>day4, :version1=>true, :version2=>false, :version3=>false},
{:day=>day5, :version1=>true, :version2=>true, :version3=>true},
{:day=>day10, :version1=>true, :version2=>true, :version3=>true},
{:day=>day15, :version1=>true, :version2=>false, :version3=>false}]
ARR2是
[{:day=>day1, :version1=>false, :version2=>false, :version3=>true},
{:day=>day2, :version1=>false, :version2=>false, :version3=>true},
{:day=>day4, :version1=>true, :version2=>true, :version3=>false},
{:day=>day5, :version1=>false, :version2=>true, :version3=>true},
{:day=>day15, :version1=>true, :version2=>false, :version3=>false}]
在這種情況下,最終的陣列將是:
[{:day=>day1, :version1=>false, :version2=>false, :version3=>true},
{:day=>day4, :version1=>true, :version2=>false, :version3=>false},
{:day=>day5, :version1=>false, :version2=>true, :version3=>true},
{:day=>day15, :version1=>true, :version2=>false, :version3=>false}]
我能想到做到這一點的唯一方法是嵌套迭代,即
days=[]
arr1.each do |d1|
arr2.each do |d2|
if d1[:day]==d2[:day]
days<<Hash.new(:day=>d1, :version1=>(d1[:version1]&&d2[:version1], :version2=>(d1[:version2]&&d2[:version2], :version3=>(d1[:version3]&&d2[:version3])
end
end
end
然而,這看來似乎是極其昂貴的,當它被縮放和陣列得到非常大。它迭代n^n次。
我確實在rassoc和assoc上看到了這個,,但看起來他們需要是數組內部的數組,我後來使用這些散列作爲散列。
有沒有更好的方法來做到這一點?我不斷提出其他想法,但是當我真正研究它們時,它們都會回到兩個嵌套迭代。
你能解釋一下這個數據是什麼?每個哈希和每個數組都有明顯的模式,這意味着您可以(也可能應該)將它們轉換爲類。 – Substantial
每個數組代表一個搜索詞(我們讓人們搜索最多兩個方面)的出現,並且每個散列是天對象搜索項目的一個發生屬於並可能會或可能不會被包括在每個幾個版本(標準和/或其他幾個選項),由版本布爾值表示。我不明白它是如何將它們作爲類(或者它們將放在軌道中的位置)。這只是搜索算法的一小部分。我試圖獲得兩個搜索條件相交的每一天的日期和版本。 – ctaymor