首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Ruby中,如何从数组生成哈希?

在Ruby中,如何从数组生成哈希?
EN

Stack Overflow用户
提问于 2010-05-31 20:12:05
回答 7查看 79.2K关注 0票数 80

我有一个简单的数组:

代码语言:javascript
复制
arr = ["apples", "bananas", "coconuts", "watermelons"]

我还有一个函数f,它将对单个字符串输入执行操作并返回值。这个操作的开销非常大,所以我想在哈希表中记下结果。

我知道我可以用下面这样的代码生成所需的散列:

代码语言:javascript
复制
h = {}
arr.each { |a| h[a] = f(a) }

我想做的是不需要初始化h,这样我就可以写出这样的代码:

代码语言:javascript
复制
h = arr.(???) { |a| a => f(a) }

这是可以做到的吗?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-05-31 20:25:53

假设您有一个函数,其funtastic名称为:"f“

代码语言:javascript
复制
def f(fruit)
   fruit + "!"
end

arr = ["apples", "bananas", "coconuts", "watermelons"]
h = Hash[ *arr.collect { |v| [ v, f(v) ] }.flatten ]

将为您提供:

代码语言:javascript
复制
{"watermelons"=>"watermelons!", "bananas"=>"bananas!", "apples"=>"apples!", "coconuts"=>"coconuts!"}

更新:

正如评论中提到的,Ruby 1.8.7为此引入了更好的语法:

代码语言:javascript
复制
h = Hash[arr.collect { |v| [v, f(v)] }]
票数 135
EN

Stack Overflow用户

发布于 2012-07-01 08:26:53

代码语言:javascript
复制
h = arr.each_with_object({}) { |v,h| h[v] = f(v) }
票数 33
EN

Stack Overflow用户

发布于 2019-01-03 21:25:03

Ruby2.6.0通过passing a block to the to_h method实现了更短的语法

代码语言:javascript
复制
arr.to_h { |a| [a, f(a)] }
票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2943422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档