【问题标题】:Convert array of hash to single hash in ruby将哈希数组转换为ruby中的单个哈希
【发布时间】:2017-07-06 19:56:08
【问题描述】:

我正在尝试将散列数组转换为以键作为数组中散列元素之一的散列。

例如:a = [{"active_accounts": 3, "id": 5}, {"active_accounts": 6, "id": 1}

我想把这个数组转换成

a = {5: {"active_accounts": 3}, 1: {"active_accounts": 6}}

我尝试通过遍历数组并访问特定键的单个哈希来做到这一点,但这似乎不起作用。任何线索将不胜感激。

【问题讨论】:

  • 能否请您发布您尝试过的代码。
  • 'response = Hash.new a.each do |key| response[key[:id]] = {"active_accounts": key[:active_accounts]} 结束响应'

标签: arrays ruby hash


【解决方案1】:

安全变体,映射到数组(应使用相同的 "id" 并正确处理):

a.group_by { |e| e.delete("id") }

正是你问的:

a.group_by { |e| e.delete("id") }
 .map { |k, v| [k, v.first] }
 .to_h

【讨论】:

  • 非常感谢 mudasobwa。很好的帮助。
【解决方案2】:
a.each_with_object({}) {|obj , hash| hash.merge!(Hash[obj[:id], Hash["active_accounts",obj[:active_accounts]]])}

# {5=>{"active_accounts"=>3}, 1=>{"active_accounts"=>6}}

希望对你有帮助。

【讨论】:

  • Rangnath 确实如此。 :)
【解决方案3】:

另一种可能的解决方案)

a.map { |hash| [hash.delete(:id), hash] }.to_h
#=> {5=>{:active_accounts=>3}, 1=>{:active_accounts=>6}}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    • 2010-12-11
    • 1970-01-01
    • 2019-10-27
    • 2019-05-23
    • 2012-10-29
    相关资源
    最近更新 更多