【问题标题】:Extracting Data from array of hashes Ruby从哈希数组中提取数据 Ruby
【发布时间】:2015-04-16 15:21:02
【问题描述】:

鉴于我有以下哈希数组

@response =  { "0"=>{"forename_1"=>"John", "surname_1"=>"Smith"}, 
               "1"=>{"forename_1"=>"Chris", "surname_1"=>"Jenkins"}, 
               "2"=>{"forename_1"=>"Billy", "surname_1"=>"Bob"},
               "Status" => 100
             }

我希望创建一个包含 forename_1surname_1 值组合的数组,因此所需的输出是

["John Smith", "Chris Jenkins", "Billy Bob"]

所以我可以做到这一点,但需要进一步的帮助

# Delete the Status as not needed
@response.delete_if { |k| ["Status"].include? k }

@response.each do |key, value|
  puts key
  #This will print out 0 1 2
  puts value
  # This will print {"forename_1"=>"John", "surname_1"=>"Smith"}, "{"forename_1"=>"Chris", "surname_1"=>"Jenkins"}, "{"forename_1"=>"Billy", "surname_1"=>"Bob"}
  puts value.keys
 # prints ["forename_1", "surname_1"], ["forename_1", "surname_1"], ["forename_1", "surname_1"] 
  puts value.values
  # prints ["John", "Smith"], ["Chris", "Jenkins"], ["Billy", "Bob"] 
  value.map { |v| v["forename_1"] }
  # However i get no implicit conversion of String into Integer error
end

我在这里做错了什么?

谢谢

【问题讨论】:

    标签: ruby arrays hash


    【解决方案1】:

    另一种方式:

    @response.values.grep(Hash).map { |t| t.values.join(' ')}
    

    【讨论】:

    • 只有在他知道哈希值总是按那个顺序出现的情况下才有效。 ruby 中的顺序是固定的,但数据可能来自其他来源。
    【解决方案2】:

    你要做的是获取@response哈希的值,过滤掉不是Hash的实例,然后将名字和姓氏连接在一起,我会这样做:

    @response.values.grep(Hash).map { |h| "#{h['forename_1']} #{h['surname_1']}" }
    # => ["John Smith", "Chris Jenkins", "Billy Bob"]
    

    【讨论】:

    • 谢谢,这是一个很好的组合方式
    【解决方案3】:
    @response.values.map{ |res| 
       [res["forename_1"] , res["surname_1"]].join(' ')  if res.is_a?(Hash)  
    }.compact
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多