【问题标题】:Read file into hash with 2 values per key?将文件读入哈希,每个键有 2 个值?
【发布时间】:2018-10-06 02:48:11
【问题描述】:

非常相似的问题:Using Ruby, Reading a file, containing name/value pairs into a hash

文件:

server1, jim, 22 server2, bob, 44

试过这个正则表达式:

Hash[*File.read('file.cfg').split(/[, \n]+/)]

但我得到: odd number of arguments for Hash (ArgumentError)

我试试这个:http://rubular.com/r/BE6ZG2nTMw

解决这个问题的方法是什么?问题是哈希初始化的方式还是我的正则表达式?

【问题讨论】:

  • 它是 CSV 文件吗?它有标题吗?
  • 不是 CSV,只是一个纯文本文件。 my_hash = Hash[*File.read('file.cfg').split(/[, \n]+/)]
  • 我怀疑你用你的代码得到的结果是你确实想要得到的结果。
  • 您希望哈希看起来像什么?
  • 好吧,@Anthony 一开始就假设我需要一个类似于{"server1"=>["jim", "22"], "server2"=>["bob","22"]} 的散列,但我不太确定这里的数组会更简单。

标签: ruby regex hash


【解决方案1】:

我想这是预期的结果:

File.readlines('/tmp/blah.cfg').map do |line|
  line.split(',', 2).map(&:strip)
end.to_h
#⇒ {"server1"=>"jim, 22", "server2"=>"bob, 44"}

也可以将其余部分拆分为一个数组:

File.readlines('/tmp/blah.cfg').map do |line|
  k, *v = line.split(',').map(&:strip)
  [k, v]
end.to_h
#⇒ {"server1"=>["jim", "22"], "server2"=>["bob", "44"]}

【讨论】:

  • 让我快速尝试一下并验证一下。
  • 这是在制作一个键=> 然后将两个东西“john, 22”放入一个值中吗?我相信期望的结果是{"server1"=>["jim", "22"], "server2"=>["bob","22"]}
猜你喜欢
  • 2018-05-08
  • 2022-01-15
  • 2011-08-16
  • 1970-01-01
  • 1970-01-01
  • 2013-04-30
  • 1970-01-01
  • 2020-02-20
  • 2012-05-15
相关资源
最近更新 更多