https://bugs.ruby-lang.org/issues/7793
Yields: value
Returns a new hash which is a copy of the current hash but each value is replaced by the result of running it through block.
{'a'=>1, 'b'=>2}.map_values { |v| v*2 } #=> {'a'=>2, 'b'=>4}
{'a'=>1, 'b'=>2}.map_values { "cat" } #=> {'a'=>"cat", 'b'=>"cat"}
If no block is given, an Enumerator is returned instead.
Yields: key
Returns a new hash which is a copy of the current hash but each key is replaced by the result of running it through block.
If block returns duplicate keys, they will be overwritten in the resulting hash.
{'a'=>1, 'b'=>2}.map_keys { |k| k*2 } #=> {'aa'=>1, 'bb'=>2}
{'a'=>1, 'b'=>2}.map_keys { "cat" } #=> {'cat'=>2}
If no block is given, an Enumerator is returned instead.
Yields: key, value
Returns a new hash which is a copy of the current hash but each key-value pair is replaced by the result of running it through block.
If block returns duplicate keys, they will be overwritten in the resulting hash.
{'a'=>1, 'b'=>2}.map_pairs { |k,v| [k*2, v+1] } #=> {'aa'=>2, 'bb'=>3}
{'a'=>1, 'b'=>2}.map_pairs { ["cat","dog"] } #=> {'cat'=>'dog'}
If no block is given, an Enumerator is returned instead.