有时我想映射一个集合.如果它是一个阵列很容易:
foo = [1,2,3]
foo.map {|v| v + 1}
#=> [2, 3, 4]
Run Code Online (Sandbox Code Playgroud)
但哈希不能以相同的方式工作:
bar = {a: 1, b: 2, c: 3}
bar.map{|k,v| v+1}
#=> [2, 3, 4]
Run Code Online (Sandbox Code Playgroud)
我真正喜欢的是:
bar = {a: 1, b: 2, c: 3}
bar.baz{|k,v| v+1}
#=> {:a=>2, :b=>3, :c=>4}
Run Code Online (Sandbox Code Playgroud)
Hash#baz某种方法在哪里.是否有一种简单的方法可以获得散列的"类似地图"的体验?
Jor*_*ing 12
在Ruby 2.4中,您可以使用内置的Hash#transform_values:
bar = {a: 1, b: 2, c: 3}
# => {:a=>1, :b=>2, :c=>3}
bar.transform_values {|v| v+1 }
# => {:a=>2, :b=>3, :c=>4}
Run Code Online (Sandbox Code Playgroud)
只是指出满足这一需求的明显且最常见的解决方案:
bar = {a: 1, b: 2, c: 3}
# => {:a=>1, :b=>2, :c=>3}
bar.map { |k, v| [k, v + 1] }.to_h
# => {:a=>2, :b=>3, :c=>4}
Run Code Online (Sandbox Code Playgroud)