【问题标题】:How do I convert a string into hash in Ruby?如何在 Ruby 中将字符串转换为哈希?
【发布时间】:2014-09-24 16:27:14
【问题描述】:

我有一个带有空格分隔值的文件:

Paul Smith 12345678
John Alex Doe 23456789
Lucy S Alena Blissett 34567890

并且需要将其转换为这样的哈希:

{"Paul Smith"=>"12345678", "John Alex Doe"=>"23456789", "Lucy S Alena Blissett"=> "34567890"}

我可以关注 these tips 获取 CSV,但我有点被 TSV 和换行符难住了。

感谢您的帮助!

【问题讨论】:

  • 你不能只在标签上拆分,用空格连接前两个并用作键,并使用最后一个作为值吗?我不确定具体是什么问题。
  • 我刚刚编辑了问题以包含可变数量的名称。我遇到的问题是,对于列表的其余部分,我无法确定一个人会有多少个名字。该数字将始终与显示的位数相同。
  • 您拥有的不是制表符分隔的值。这就是你的问题的原因。
  • 道歉。我不确定我有什么。上面的类型有名字吗?
  • 所以一直使用空格是有意的?不准确地使用术语是一件坏事。我不知道有什么格式可以匹配你所拥有的。

标签: ruby hash tsv


【解决方案1】:

假设格式根本不是制表符分隔值,而是用空格分隔:

s = <<_
Paul Smith 12345678
John Alex Doe 23456789
Lucy S Alena Blissett 34567890
_

s.scan(/(.+) (.+)/).to_h

结果:

{
  "Paul Smith"            => "12345678",
  "John Alex Doe"         => "23456789",
  "Lucy S Alena Blissett" => "34567890"
}

【讨论】:

  • 像往常一样,没有遗漏,也没有多余的东西。不错。
  • 最近我犯了几个错误,你指出来了。
  • 是的,你可能偶尔会有点粗心,但即使你的答案有点错误,它们通常也会提供洞察力,这是主要的。当一个错误引起你的注意时,你会修复它。在 SO 上,经常有人会指出答案中的错误,然后是震耳欲聋的沉默。这种行为是否提高了回答者在他/她的同龄人中的地位?我认为不会。
【解决方案2】:

使用String#scan 并将结果数组转换为哈希:

File.read('file').scan(/^(.*)\s+([^\s]+)\r?$/).to_h
# => {"Paul Smith"=>"12345678", "John Alex Doe"=>"23456789", "Lucy S Alena Blissett"=>"34567890"}

【讨论】:

    猜你喜欢
    • 2010-11-05
    • 2013-07-06
    • 2015-04-02
    • 1970-01-01
    • 1970-01-01
    • 2014-05-14
    • 2019-12-19
    • 2014-07-01
    • 1970-01-01
    相关资源
    最近更新 更多