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

Mar*_*tin 5 ruby

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

CSV.read(ARGV[0], headers: true).group_by {|r| r['myKey']}
Run Code Online (Sandbox Code Playgroud)

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

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

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

小智 6

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


SHS*_*SHS 2

不,我不相信有。each_with_object但你可以这样解决你的问题:

CSV.
read(ARGV[0], headers: true).
each_with_object({}) do |r, hash|
  key = r['myKey']
  value = r

  hash[key] = value
end
Run Code Online (Sandbox Code Playgroud)