【问题标题】:merge every 3rd Hash in Array合并数组中的每个第三个哈希
【发布时间】:2014-02-17 17:29:35
【问题描述】:

您好,我找不到如何合并数组的每 3 个哈希值。 这是我的哈希数组。

     [
      {:key1=>"v1"}, {:ky2 => "v2"}, {:key3 => "v3"}, 
      {:key1=>"v4"}, {:ky2 => "v5"}, {:key3 => "v6"},
      {:key1=>"v7"}, {:ky2 => "v8"}, {:key3 => "v9"},..
     ]

我需要将每 3 个哈希合并为如下所示:

      [
       {:key1=>"v1", :ky2 => "v2", :key3 => "v3"}, 
       {:key1=>"v4", :ky2 => "v5", :key3 => "v6"},
       {:key1=>"v7", :ky2 => "v8", :key3 => "v9"},..
      ]

提前感谢您的帮助。

【问题讨论】:

    标签: ruby arrays merge hash


    【解决方案1】:

    我愿意

    hs = [
          {:key1=>"v1"}, {:ky2 => "v2"}, {:key3 => "v3"}, 
          {:key1=>"v4"}, {:ky2 => "v5"}, {:key3 => "v6"},
          {:key1=>"v7"}, {:ky2 => "v8"}, {:key3 => "v9"}
         ]
    
    hs.each_slice(3).map { |grouped_hs| grouped_hs.inject(:merge) }
    # => [{:key1=>"v1", :ky2=>"v2", :key3=>"v3"},
    #     {:key1=>"v4", :ky2=>"v5", :key3=>"v6"},
    #     {:key1=>"v7", :ky2=>"v8", :key3=>"v9"}]
    

    【讨论】:

    • "a" -> hs, "e" -> "grouped_hs" 和 &:merge -> :merge 你得到了我的支持。或者类似的东西,只是更有意义的名字;)
    • @tokland 谢谢...完成!
    • tokland 表示 hs 表示复数“哈希”(哈希数组),而不是单数“哈希”。使用hsh,这意味着一个哈希,这是相当误导。
    • +1 @Arup 如果你有时间,我很想解释一下inject(:merge) 以及为什么会这样。纯粹出于好奇。
    • @franksort reduce(sym) → obj - 通过应用二元运算组合枚举的所有元素,该二元运算由命名方法或运算符的块或符号指定。 所以grouped_hs.inject(:merge)这意味着grouped_hs.inject({}) { |init_hsh,elem_hsh| init_hsh.merge(elem_hsh) }
    【解决方案2】:
    a.flat_map(&:to_a).each_slice(3).map(&:to_h)
      #=> [{:key1=>"v1", :ky2=>"v2", :key3=>"v3"},
      #=>  {:key1=>"v4", :ky2=>"v5", :key3=>"v6"},
      #=>  {:key1=>"v7", :ky2=>"v8", :key3=>"v9"}]
    

    Array#to_h 在 v2.1 中添加。

    【讨论】:

      【解决方案3】:
      a = [
        { :key1=>'v1' }, { :ky2 => 'v2' }, { :key3 => 'v3' }, 
        { :key1=>'v4' }, { :ky2 => 'v5' }, { :key3 => 'v6' },
        { :key1=>'v7' }, { :ky2 => 'v8' }, { :key3 => 'v9' }
      ]
      
      a.each_slice(3).map{ |e| e.inject(&:merge) }
      

      【讨论】:

        猜你喜欢
        • 2021-02-02
        • 1970-01-01
        • 2020-08-18
        • 2016-10-07
        • 1970-01-01
        • 2011-07-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多