當涉及到發現兩個非常大的陣列之間的差異時,我遇到了有關效率和算法的問題。我希望對算法有很好理解的人可以指出我如何解決這個問題的正確方向,因爲我目前的實現需要花費很長時間。我有兩個非常大的數組。我有兩個非常大的數組。其中一個包含具有無效域名的電子郵件列表,另一個列表是我需要檢查第一個數組的混合列表。Ruby - 是找到兩個非常大的數組之間差異的有效方法嗎?
accounts_with_failed_email_domains = [279,000 records in here]
unchecked_account_domains = [149,000 records in here]
我需要做的就是去通過unchecked_account_domains
列表,然後比較每個條目,看看是否有在accounts_with_failed_email_domains
匹配。我需要在列表之間插入所有匹配的單獨數組,以便稍後處理。
我該如何高效地編寫能夠快速檢查這些帳戶的內容。這是我到目前爲止所嘗試過的。
unchecked_account_domains = [really big array]
unchecked_account_domains = unchecked_account_domains.sort
accounts_with_failed_email_domains = [another huge array].sort
unchecked_account_domains.keep_if do |email|
accounts_with_failed_email_domains.any? { |failed_email| email == failed_email }
end
# Count to see how many accounts are left
puts unchecked_account_domains.count
上面的這個實現一直在運行。這是第二次嘗試,仍然證明不會更好。
unchecked_account_domains = [really big array]
unchecked_account_domains = unchecked_account_domains.sort
accounts_with_failed_email_domains = [another huge array].sort
unchecked_account_domains.each do |email|
accounts_with_failed_email_domains.bsearch do |failed_email|
final_check << email if email == failed_email
end
end
# Count to see how many accounts are left
puts final_check.count
bsearch
似乎很有希望,但我敢肯定我沒有正確使用它。此外,我試圖調查這個問題comparing large lists,但這是在python
,我似乎無法找到set
的Ruby等價物。有沒有人有任何想法如何解決這個問題?
http://ruby-doc.org/stdlib-2.3.1/libdoc/set/rdoc/Set.html? –