Ruby哈希的map_values()?

ssc*_*eck 5 ruby hash

我想念HashRuby中的一个方法来仅转换/映射哈希值.

h = { 1 => [9,2,3,4], 2 => [6], 3 => [5,7,1] }
h.map_values { |v| v.size }
#=> { 1 => 4, 2 => 1, 3 => 3 } 
Run Code Online (Sandbox Code Playgroud)

你如何在Ruby中存档?

更新:我正在寻找一个实现map_values().

# more examples
h.map_values { |v| v.reduce(0, :+) }
#=> { 1 => 18, 2 => 6, 3 => 13 } 

h.map_values(&:min)
#=> { 1 => 2, 2 => 6, 3 => 1 }
Run Code Online (Sandbox Code Playgroud)

ssc*_*eck 7

Ruby 2.4引入了方法Hash#transform_valuesHash#transform_values!具有所需的行为.

h = { 1=>[9, 2, 3, 4], 2=>[6], 3=>[5, 7, 1] }
h..transform_values { |e| e.size }
#=> {1=>4, 2=>1, 3=>3}
Run Code Online (Sandbox Code Playgroud)


Dam*_*fie 5

你可以像这样修补哈希类

class Hash
  def map_values
    map { |k, v|
      [k, yield(v)]
    }.to_h
  end
end

p ({1 => [1,1,1,1], 2 => [2], 3 => [3,3,3]}.map_values { |e| e.size })
Run Code Online (Sandbox Code Playgroud)