我有一个简单的数组:
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/