我收到了由公司名称和电子邮件组成的列表(按名称(first.last@company.org)格式化),然后从中提取电子邮件并将其输入到数组中。
ary = ["Babe.Ruth@company.com", "Joe.Black@company.com", "Hannibal.Smith@company.com"]
我如何有效地按电子邮件的姓氏部分(在句号和@之间)对电子邮件进行排序,从而使它具有这样的列表?
Joe.Black@company.org
Babe.Ruth@company.org
Hannibal.Smith@company.org
答案 0 :(得分:5)
arr.sort_by { |s| s[/(?<=\.)[^@]+/] }
#=> ["Joe.Black@company.org", "Babe.Ruth@company.org", "Hannibal.Smith@company.org"]
(?<=\.)
是令人反感的。它要求在匹配项之前紧跟一个句点,但是该句点不是匹配项的一部分。参见Enumerable#sort_by。
答案 1 :(得分:1)
没有正则表达式的类似解决方案
arr.sort_by { |s|
s.split('@').first.split('.').last
}
一步一步
'Joe.Black@company.org'.split('@')➡['Joe.Black','company.org']
['Joe.Black','company.org']。first➡'Joe.Black'
'Joe.Black'.split('。')➡['Joe','Black']
['Joe','Black']。last➡'Black'
该块返回“ Black”,它将用于对“ Joe.Black@company.org”进行排序