说:

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将调用块来解析任何发生冲突的键的合并,将值设置为块的返回值.

Ruby相关问答推荐

try 安装Chruby时出现问题,终端问题

R10K模块在try 安装gem r10k时获得错误的Ruby版本

Ruby:一个方法可以返回不同类型的对象吗?

无法解析音频文件 track1.m4a

类 SpecificationPolicy 的超类不匹配

在Ruby中按字母顺序对数组中的数组进行排序?

.nil?、.blank? 之间的区别?和.empty?

我如何判断哪些模块已混合到一个类中?

在 Go (golang) 中编写一个 Ruby 扩展

为什么我们要在 Ruby 的类中放置一个模块?

安装 RVM:需求安装失败,状态为:1

来自 Linux 上的命令队列的并行处理(bash、python、ruby ......随便)

Ruby 是否有任何数字格式化类?

在 Ruby 中计算中位数

纯 Ruby 并发哈希

如何在 Ruby 中将类构造函数设为私有?

获取Ruby中当前目录的父目录

何时使用在 Ruby 中启动子进程的每种方法

安装 Jekyll 时出错 - 本机扩展构建

Python 中的一切都像 Ruby 一样是对象吗?