You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby中如何检查单词长度并按长度分组统计计数

Ruby 按单词长度分组计数实现方案说明

现有实现评估

你编写的代码:

arr.group_by(&:length).transform_values(&:count)

完全符合Ruby社区的惯用最佳实践,逻辑清晰可读性强,没有冗余操作,在需要兼容Ruby 2.7以下低版本的场景下可以直接使用,不存在问题。

更高效的简化实现

如果项目运行环境为Ruby 2.7及以上版本(目前绝大多数正常维护的Ruby项目都满足该要求),推荐使用Ruby内置的频次统计方法tally实现,性能更优、内存开销更低,写法也更简洁:

arr.map(&:length).tally

该实现的逻辑是先遍历一次数组提取所有单词的长度值,再通过tally直接统计每个长度的出现次数,不需要像group_by方案那样生成存储所有原字符串的中间分组数组,处理大数组时性能优势非常明显,语义也更直白,读代码的人可以一眼识别出这是在做频次统计。

格式化输出目标结果

拿到统计哈希后,直接遍历即可输出你需要的文本格式:

arr = ["john","roger","matt","john", "james", "Jennifer"]
length_count = arr.map(&:length).tally
length_count.each do |len, count|
  puts "共有#{count}个名称包含#{len}个字符"
end

上述代码实际运行输出为:

共有3个名称包含4个字符
共有2个名称包含5个字符
共有1个名称包含8个字符

注:你给出的预期结果中“共有1个名称包含1个字符”属于笔误,测试数组中不存在长度为1的名称,最后一个名称Jennifer长度为8。


内容的提问来源于stack exchange,提问作者Gregory

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 18:45:40