我试图将值从数组存储到散列(数组值是键,值只是0).这是我的代码.有任何想法吗?
[1, 2, 3, 4].inject({}) {|result, e| result[e] = 0}
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误.
oMethodError: undefined method `[]=' for 0:Fixnum
from (irb):1
from (irb):1:in `inject'
from (irb):1:in `each'
from (irb):1:in `inject'
from (irb):1
from :0
Run Code Online (Sandbox Code Playgroud)
问题是result[e] = 0返回操作的结果,即0,并将其传递到您尝试调用[]=它的下一次迭代.您可以通过执行以下操作来解决此问题:
[1, 2, 3, 4].inject({}) {|result, e| result[e] = 0; result }
"结果"的工作正常,但作为一种品味,我更喜欢这种方式:
[1,2,3,4].inject({}) {|result,e| result.merge!(e=>0)}
Run Code Online (Sandbox Code Playgroud)
如果这是性能关键代码,那么品味就是其代价.这是一个快速的基准测试,可以完成这个操作一百万次.
在Ruby 1.8.5中
merge: 22s
merge!: 14s
; result: 9s
Run Code Online (Sandbox Code Playgroud)
在Ruby 1.9.1中
merge: 18s
merge!: 11s
; result: 5s
Run Code Online (Sandbox Code Playgroud)