Ruby on Rails对数组中的所有对象执行操作?

时间:2017-01-30 20:16:25

标签: ruby-on-rails ruby

我们说我有一个数组中的电子邮件列表,让我们说〜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万封电子邮件)。

2 个答案:

答案 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