说:
h = { 1 => 10, 2 => 20, 5 => 70, 8 => 90, 4 => 34 }
我想将每个值v
改为foo(v
),这样h
将是:
h = { 1 => foo(10), 2 => foo(20), 5 => foo(70), 8 => foo(90), 4 => foo(34) }
实现这一目标最优雅的方式是什么?
说:
h = { 1 => 10, 2 => 20, 5 => 70, 8 => 90, 4 => 34 }
我想将每个值v
改为foo(v
),这样h
将是:
h = { 1 => foo(10), 2 => foo(20), 5 => foo(70), 8 => foo(90), 4 => foo(34) }
实现这一目标最优雅的方式是什么?
可以使用update
(别名merge!
)使用块更新每个值:
hash.update(hash) { |key, value| value * 2 }
请注意,我们实际上是在将hash
与自身合并.这是必需的,因为Ruby将调用块来解析任何发生冲突的键的合并,将值设置为块的返回值.