首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Ruby中,我知道每组只有1个元素的group_by

在Ruby中,我知道每组只有1个元素的group_by
EN

Stack Overflow用户
提问于 2015-01-24 02:46:55
回答 5查看 1.8K关注 0票数 5

我有一个CSV文件,其中一列是主键。当我这样做的时候:

代码语言:javascript
运行
复制
CSV.read(ARGV[0], headers: true).group_by {|r| r['myKey']}

我得到一个从key到行列表的哈希表,其中列表的长度始终为1。

是否有一个版本的group_by断言每个键只有一个值,并创建从键到该单个值的散列?

如果做不到这一点,是否有像.first这样的东西断言在数组/enumerable中只有一个元素?我喜欢我的脚本在假设错误时失败,而不是默默地返回错误的东西。

EN

回答 5

Stack Overflow用户

发布于 2015-01-24 07:36:38

如果您知道r['myKey']的值是唯一的,那么就没有必要使用group_by。据我所知,你可以这样做:

代码语言:javascript
运行
复制
rows = CSV.read(ARGV[0], headers: true)
Hash[rows.map { |r| r['myKey'] }.zip(rows)]

在Ruby 2.0+中,第二行可以写成:

代码语言:javascript
运行
复制
rows.map { |r| r['myKey'] }.zip(rows).to_h
票数 4
EN

Stack Overflow用户

发布于 2019-11-07 03:18:27

如果你使用Rails,你可以使用index_by方法。

票数 3
EN

Stack Overflow用户

发布于 2015-01-24 02:56:29

不是的。我不相信有这回事。但是你可以像这样用each_with_object解决你的问题:

代码语言:javascript
运行
复制
CSV.
read(ARGV[0], headers: true).
each_with_object({}) do |r, hash|
  key = r['myKey']
  value = r

  hash[key] = value
end
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28116683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档