el_*_*ick 40 ruby hash attributes sum
我有2个哈希,例如:
{'a' => 30, 'b' => 14}
{'a' => 4, 'b' => 23, 'c' => 7}
Run Code Online (Sandbox Code Playgroud)
其中a,b和c都是对象.我怎样才能将这些哈希的密钥加起来得到一个新的哈希:
{'a' => 34, 'b' => 37, 'c' => 7}
Run Code Online (Sandbox Code Playgroud)
Nak*_*lon 75
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}
Run Code Online (Sandbox Code Playgroud)
如果有人想要添加超过 2 个哈希值,请使用此
#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+arg2 } }
# => {:a=>8, :b=>16, :c=>32, :d=>80, :e=>20, :r=>14}
Run Code Online (Sandbox Code Playgroud)
如果是异构哈希(包含字符串和数字)。仅用于添加整数。
@resultant_visit_hash = arr.inject { |acc, next_obj| acc.merge(next_obj) { |key,arg1,arg2| arg1+arg2 if (arg1.class == Integer && arg2.class == Integer) } }
Run Code Online (Sandbox Code Playgroud)
代码是不言自明的。
| 归档时间: |
|
| 查看次数: |
9356 次 |
| 最近记录: |