ruby - 在 Ruby 中,如何从数组中生成散列?

标签 ruby arrays hash

我有一个简单的数组:

arr = ["apples", "bananas", "coconuts", "watermelons"]

我还有一个函数 f,它将对单个字符串输入执行操作并返回一个值。此操作非常昂贵,因此我想将结果存储在哈希中。

我知道我可以用这样的东西制作所需的散列:

h = {}
arr.each { |a| h[a] = f(a) }

我想做的是不必初始化 h,这样我就可以这样写:

h = arr.(???) { |a| a => f(a) }

可以吗?

最佳答案

假设你有一个名字很有趣的函数:“f”

def f(fruit)
   fruit + "!"
end

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

会给你:

{"watermelons"=>"watermelons!", "bananas"=>"bananas!", "apples"=>"apples!", "coconuts"=>"coconuts!"}

更新:

如评论中所述,Ruby 1.8.7 为此引入了更好的语法:

h = Hash[arr.collect { |v| [v, f(v)] }]

关于ruby - 在 Ruby 中,如何从数组中生成散列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2943422/

相关文章:

ruby-on-rails - 在 Rails 应用程序中使用 watchr 进行彩色输出

c++ - 何时使用 std::complex<long double> 与自己的复杂数据类型(结构等)

php - 检查数组 PHP 中是否存在具有特定值的键

security - 为什么在数据库已经受到威胁的情况下对密码进行哈希处理?

java - 计算 java.util.hash 的 hashcode 值时使用的常量说明

ruby - 在 Internet Explorer 上发布期间 Sinatra session 丢失

ruby-on-rails - API文档生成工具

javascript - 为什么我的 JavaScript 函数不返回已检查的数组值?

hash - 如何均衡两个 .ps 文件以获得相同的 md5 哈希值

ruby-on-rails - Rails Date#strptime 在 200 年之前错误地解析日期