【问题标题】:Ruby: Array of Arrays to Array of HashesRuby:数组数组到哈希数组
【发布时间】:2014-08-22 03:08:13
【问题描述】:

我有一个数组数组(从 CSV 文件导入):

[[title1],[title2],[title3],[title4],[title5]],
[[song1],[author1],[bpm1],[key1],[energy1]],
...
[[song100],[author100],[bpm100],[key100],[energy100]].

并希望将其转换为哈希数组,例如:

[{"title1"=>"song1","title2"=>"author1","title3"=>"bpm1","title4"=>"key1","title5"=>"energy1"}],
...
[{"title1"=>"song100","title2"=>"author100","title3"=>"bpm100","title4"=>"key100","title5"=>"energy100"}].

我使用了下面的代码,但它不起作用:

    require 'csv'
    csv=CSV.read('library.csv')

array_hash=[]
hash={}

for i in 1..(csv.size)

  hash1={}

    for n in 0..4

        a=csv[0][n]
        b=csv[i][n]
        hash1[a]=b
        hash.merge!(hash1)

    end

  array_hash.push(hash)

end

但我明白了:

> NoMethodError: undefined method `[]' for nil:NilClass     from
> (irb):149:in `block (2 levels) in irb_binding'    from (irb):146:in
> `each'    from (irb):146:in `block in irb_binding'    from (irb):143:in
> `each'    from (irb):143  from
> /Users/user/.rvm/rubies/ruby-2.0.0-p481/bin/irb:12:in `<main>'

这有什么问题? 如何使用 .each 做同样的事情?

【问题讨论】:

    标签: ruby arrays csv hash


    【解决方案1】:

    ruby CSV 库在CSV::Row 上有一个to_hash 函数,因此您可以改为:

    require 'csv'
    rows = CSV.read('library.csv', headers: true).map(&:to_hash) #rows would return a list of hashes
    

    【讨论】:

    • 嗯,是的,我的意思是,如果你真的想使用标准库给你的东西,这很有效。 :-) 好答案...我什至没有意识到CSV::Row 上有一个to_hash 函数。我正在删除我的答案。
    猜你喜欢
    • 1970-01-01
    • 2017-11-30
    • 2011-01-11
    • 2021-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-11
    相关资源
    最近更新 更多