我有一个简单的数组:
arr = ["apples", "bananas", "coconuts", "watermelons"] 我也有一个函数f,它将对单个字符串输入执行一个操作并返回一个值。该操作非常昂贵,因此我想在哈希中记住结果。
我知道我可以用以下方式进行所需的哈希:
h = {} arr.each { |a| h[a] = f(a) } 我想做的就是不必初始化h,这样我就可以编写如下代码:
h = arr.(???) { |a| a => f(a) } 能做到吗? 问题来源于stack overflow
假设您有一个函数,函数名称为:“ 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)] }]
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。