我有一个与效率和算法有关的问题,涉及在找到两个非常大的数组之间的差异时。我希望理解算法的人能指导我如何解决这个问题,因为我的当前实现需要非常长时间才能完成。
我需要做的是遍历
我应该如何高效地编写代码以快速检查这些帐户?以下是我迄今为止尝试过的方法。
问题:
我有两个非常大的数组。其中一个包含无效域名的电子邮件列表,另一个是混合列表,我需要对其进行检查以确定是否存在第一个数组中的内容。
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
。 有人有解决这个问题的想法吗?