[Ruby] 我要聚合数组元素!

后端开发   发布日期:2025年07月31日   浏览次数:196

介绍

当您想要聚合数组元素时,这里有一些编写方法。

考虑以下用户数组,并希望按原籍国查找用户数量。

# 集計したいユーザー配列
user_list = [
  { user_id: , hometown: '東京都' },
  { user_id: , hometown: '大阪府' },
  { user_id: , hometown: '東京都' },
  { user_id: , hometown: '北海道' },
  { user_id: , hometown: '大阪府' },
  { user_id: , hometown: '東京都' }
]
# 出身地ごとの人数を次のようにハッシュにまとめたい
{"東京都"=>, "大阪府"=>, "北海道"=>}

* 示例代码执行环境

$ ruby --version
ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-darwin21]

方法一:程序化编写

result = {}
user_list.each do |user|
  result[user[:hometown]] ||= 
  result[user[:hometown]] += 
end
result
# => {"東京都"=>3, "大阪府"=>2, "北海道"=>1}

我想写一些更像 Ruby 的东西。

方法二:使用group_by

user_list.group_by { |user| user[:hometown] }.transform_values(&:length)
# => {"東京都"=>3, "大阪府"=>2, "北海道"=>1}

消除了开始时准备空哈希的需要,并且描述变得简洁。

方法三:使用tally

user_list.map { |user| user[:hometown] }.tally
# => {"東京都"=>3, "大阪府"=>2, "北海道"=>1}

它也可以简单地使用Enumerable#tally 编写,这是Ruby 2.7 中添加的一种相对较新的方法。

参考

原创声明:本文系作者授权九品源码发表,未经许可,不得转载;

原文地址:https://www.19jp.com/show-308627567.html

以上就是[Ruby] 我要聚合数组元素!的详细内容,更多关于[Ruby] 我要聚合数组元素!的资料请关注九品源码其它相关文章!