代码之家  ›  专栏  ›  技术社区  ›  el_quick

Sum 2使用相同的键散列属性

  •  40
  • el_quick  · 技术社区  · 14 年前

    我有两个散列,例如:

    {'a' => 30, 'b' => 14}
    {'a' => 4, 'b' => 23, 'c' => 7}
    

    哪里 a b c

    {'a' => 34, 'b' => 37, 'c' => 7}
    
    2 回复  |  直到 14 年前
        1
  •  75
  •   Nakilon earlonrails    10 年前
    a_hash = {'a' => 30, 'b' => 14}
    b_hash = {'a' => 4, 'b' => 23, 'c' => 7}
    
    a_hash.merge(b_hash){ |k, a_value, b_value| a_value + b_value }
    => {"a"=>34, "b"=>37, "c"=>7}
    
    b_hash.merge(a_hash){ |k, b_value, a_value| a_value + b_value }
    => {"a"=>34, "b"=>37, "c"=>7}
    
        2
  •  1
  •   Rajan Verma - Aarvy    6 年前

    如果有人想添加两个以上的散列,请使用

    #sample array with any number of hashes
    sample_arr =  [{:a=>2, :b=>4, :c=>8, :d=>20, :e=>5},
    {:a=>1, :b=>2, :c=>4, :d=>10, :e=>5, :r=>7},
    {:a=>1, :b=>2, :c=>4, :d=>10},
    {:a=>2, :b=>4, :c=>8, :d=>20, :e=>5},
    {:a=>1, :b=>2, :c=>4, :d=>10, :e=>5, :r=>7},
    {:a=>1, :b=>2, :c=>4, :d=>10}]
    
    sample_arr.inject { |acc, next_obj| acc.merge(next_obj) { |key,arg1,arg2| arg1+agr2 } }`
    

    如果是异类哈希(同时包含字符串和数字)。只添加整数。

    @resultant_visit_hash = arr.inject { |acc, next_obj| acc.merge(next_obj) { |key,arg1,arg2| arg1+agr2 if (arg1.class == Fixnum && arg2.class == Fixnum) } }