在查找两个非常大的数组之间的差异时,我遇到了一个与效率和算法有关的问题。我希望对算法有深入了解的人能够为我解决该问题的正确方法指明方向,因为我当前的实现需要花费非常长的时间。
问题:
我有两个非常大的阵列。一个包含一个包含无效域名的电子邮件列表,另一个包含我需要对照第一个数组检查的混合列表。
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
似乎很有希望,但是我敢肯定我没有正确使用它。另外,我尝试研究比较大型列表的问题,但这确实存在,python
而且我似乎找不到Ruby的等效项set
。有人对如何解决这个问题有任何想法吗?
看来您可以使用Array#-
:
result = unchecked_account_domains - accounts_with_failed_email_domains
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句