我有一个CSV文件,其中一列是主键。当我这样做的时候:
CSV.read(ARGV[0], headers: true).group_by {|r| r['myKey']}我得到一个从key到行列表的哈希表,其中列表的长度始终为1。
是否有一个版本的group_by断言每个键只有一个值,并创建从键到该单个值的散列?
如果做不到这一点,是否有像.first这样的东西断言在数组/enumerable中只有一个元素?我喜欢我的脚本在假设错误时失败,而不是默默地返回错误的东西。
发布于 2015-01-24 07:36:38
如果您知道r['myKey']的值是唯一的,那么就没有必要使用group_by。据我所知,你可以这样做:
rows = CSV.read(ARGV[0], headers: true)
Hash[rows.map { |r| r['myKey'] }.zip(rows)]在Ruby 2.0+中,第二行可以写成:
rows.map { |r| r['myKey'] }.zip(rows).to_h发布于 2019-11-07 03:18:27
如果你使用Rails,你可以使用index_by方法。
发布于 2015-01-24 02:56:29
不是的。我不相信有这回事。但是你可以像这样用each_with_object解决你的问题:
CSV.
read(ARGV[0], headers: true).
each_with_object({}) do |r, hash|
key = r['myKey']
value = r
hash[key] = value
endhttps://stackoverflow.com/questions/28116683
复制相似问题