【问题标题】:How to convert an array of Objects to array of Hashes? [closed]如何将对象数组转换为哈希数组? [关闭]
【发布时间】:2015-02-09 04:23:24
【问题描述】:

我当前的对象“sum”数组是:

[{"sum":{"key1":0,"key2":"2014","key3":0,"key4":"8","key5":0,"key6":"0","key7":0}},
 {"sum":{"key1":0,"key2":"2014","key3":0,"key4":"12","key5":0,"key6":"1","key7":0}}]

目标是:

[{"key1":0,"key2":"2014","key3":0,"key4":"8","key5":0,"key6":"0","key7":0,
 {"key1":0,"key2":"2014","key3":0,"key4":"12","key5":0,"key6":"1","key7":0}]

【问题讨论】:

  • 这不是对象数组,也不是有效的 Ruby 数组
  • 我尝试将其转换为 json (render :text => a.to_json) 以便您了解我的数据
  • @RustamA.Gasanov 这实际上是 Ruby 2.2 中的有效语法。
  • @muistooshort 实际上,当前数组来自模型sum.find_by_sql(sql)。我试图从ActiveRecord::Base.connection.execute(sql) 获取它,但这返回一个数组,其中元素是数组而不是哈希
  • @muistooshort op 提到他使用 Rails 2(由于某种未知原因被最后一位编辑删除)。我相信它与 Ruby 2.2 完全不兼容

标签: ruby arrays hash


【解决方案1】:

使用Array#flat_map

array.flat_map(&:values)
# is same as :
array.flat_map { |hash| hash.values }
# or simply if you have
array.map { |hash| hash["sum"] }

【讨论】:

  • 我将对象数组渲染为 json 以便于理解。所以,“.values”是行不通的,因为这里的值是对象的属性(hash.key1 可以)
  • @VuLe 数组中的哈希值.. 在 Ruby 2.2.0 中是有效的语法...在 2.2.0 中它会像魅力一样发挥作用。
  • flat_map 不起作用(未定义的方法)。我试过和你上次一样(array.map { |hash| hash["sum"] }),所有元素都是空的
  • @VuLe 它应该可以工作。请根据需要标记问题。
  • 我认为您和其他人可能因为我的英语不好而无法清楚地理解我的上下文。我对此感到抱歉。我已经解决了我的问题作为我的以下答案。谢谢。
【解决方案2】:

我使用了symbolize_keys@Muistooshort 在本主题中提到的How to convert Object to array of hashes with symbol keys

所以,这是我使用的代码:

result = arr.map{|e| e.attributes.symbolize_keys}

【讨论】:

    猜你喜欢
    • 2017-06-09
    • 1970-01-01
    • 2013-12-09
    • 2012-10-29
    • 1970-01-01
    • 1970-01-01
    • 2019-10-27
    • 2019-05-23
    • 2015-11-26
    相关资源
    最近更新 更多