如何使用Ruby将邮箱数组按顶级域名(TLD)分组为Hash格式
问题原因
- 代码直接将哈希中TLD对应键的赋值为单个邮箱字符串,同TLD的新值会覆盖旧值,最终仅保留最后一个匹配邮箱
- 现有逻辑没有为每个TLD对应的值初始化数组结构,也没有做元素追加操作
- 代码中的
if last_el == e.partition(".").last判断完全冗余,该表达式恒为真,无实际作用
修复方案
基础修改版(贴合你原有写法逻辑)
def group_by_tld(emails) new_hash = {} emails.each do |e| # 提取顶级域名,转成符号类型匹配期望返回的key格式 tld = e.split(".").last.to_sym # 如果该TLD对应的数组不存在则初始化 new_hash[tld] ||= [] # 将当前邮箱追加到对应数组 new_hash[tld] << e end new_hash end
简洁写法(使用Ruby内置分组方法)
Ruby原生的group_by方法可以直接实现分组需求,代码更精简:
def group_by_tld(emails) emails.group_by { |email| email.split(".").last.to_sym } end
两种写法运行后都可以得到你期望的返回结果。
内容的提问来源于stack exchange,提问作者Onur Karadeniz
相关产品推荐
相关产品推荐

