使用哈希注入数组时出现"undefined method `[]=' for nil:NilClass"错误



这是我第一次使用Ruby,我需要使用inject方法从给定的数组中创建哈希。这段代码非常接近我找到的几个教程,但在执行时会出现undefined method `[]=' for nil:NilClass错误。我是不是遗漏了什么?

def int_hash()
[[:key1, "value1"], [:key2, "value2"]].inject({}) do |hash, element|
hash[element.first] = element.last
puts hash
end
end
int_hash()

由于puts是块中的最后一条语句,它返回nil,因此返回nil,导致累加器hash在第二次迭代中为nil。你应该返回散列。您应该将数组作为参数传递给inj_hash方法,以使其可重用。

def inj_hash(arr)
arr.inject({}) do |hash, element|
hash[element.first] = element.last
hash
end
end
inj_hash([[:key1, "value1"], [:key2, "value2"]])
#=> {:key1=>"value1", :key2=>"value2"}

从键值对数组创建哈希的最简单解决方案是使用Hash::[]

arr = [[:key1, "value1"], [:key2, "value2"]]
Hash[arr]
#=> {:key1=>"value1", :key2=>"value2"}

最新更新