2017-01-30 51 views
1

假设我有一个数组中的电子邮件列表,比如说〜2000封电子邮件。对数组中所有对象的Ruby on Rails操作?

emails = ["[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]"] 

假设我理论上想要得到电子邮件的网站名称。所以我想要做emails.each do |email| puts email.split("@")[1]

这将使我得到每个电子邮件的网站名称。但是我很好奇,有没有更快的方法将它从数组中取出?

理想情况下,我想创建一个array.uniq,其中包含链接到电子邮件的每个站点的唯一列表。我可以手动执行此操作,但是我想知道是否有更快的方法在数组本身上执行此操作(实际上,我的阵列大约有200万封电子邮件)。

回答

4

你正在创建的不是一个真正的数组,它关心的是顺序,并不关心唯一性。你想要一个Set,它不关心顺序,但不允许重复。

require 'set' 

email_domains = Set.new 
emails.each do |email| 
    email_domains.add email.split('@', 2).last 
end 
+0

辉煌先生!这会很好 –

1

我喜欢这个解决方案

emails.map { |email| email.split('@').last }.uniq 

更新

或者这一个

emails.collect { |email| email.split('@').last }.uniq