我们说我有一个数组中的电子邮件列表,让我们说〜2000封电子邮件。
emails = ["AllenXiang@boyaa.com", "2dlogic@gmail.com", "support@KalromSystems.com", "kangisupport@helendorongroup.com", "James@APPCRASHCOURSE.COM", "James@appcrashcourse.com", "SpartanAppsUK@gmail.com"]
我们说我理论上想要获取电子邮件网站名称。所以我想做emails.each do |email| puts email.split("@")[1]
哪个可以获取电子邮件的每个网站名称。但我很好奇,是否有更快的方法将其从阵列中解脱出来?
理想情况下,我想创建一个array.uniq
,其中包含链接到电子邮件的每个网站的唯一列表。我可以手动执行此操作,但我想知道是否有更快的方法在阵列本身上执行此操作(我实际拥有的数组是大约200万封电子邮件)。
答案 0 :(得分:4)
你所创造的并不是一个真正的阵列,它关心秩序而不关心唯一性。您需要Set,它不关心订单,但不允许重复。
require 'set'
email_domains = Set.new
emails.each do |email|
email_domains.add email.split('@', 2).last
end
答案 1 :(得分:1)
我更喜欢这个解决方案
emails.map { |email| email.split('@').last }.uniq
<强>更新强>
或者这个
emails.collect { |email| email.split('@').last }.uniq