【发布时间】:2020-12-23 17:44:01
【问题描述】:
我将哈希变量设置为哈希数组:
[12] pry (main)> hash = {: sku => "1234",: name => "Test"}, {: sku => "5678",: name => "Test2"}=> [{: sku => "1234",: name => "Test"}, {: sku => "5678",: name => "Test2"}]
但是在循环中使用数据时,我得到“TypeError: can't cast Hash”错误。
问题:如何将哈希数组转换为没有数组的哈希并覆盖?
要使哈希变量匹配以下内容:{: sku => "1234",: name => "Test"}, {: sku => "5678",: name => "Test2"}
【问题讨论】:
-
你是如何循环播放的?我认为您的问题的答案是允许您遍历数组中的每个哈希,不是吗?
-
@benjessop 有什么想法可以做到这一点吗?
-
array_of_hashes.map { |inner_hash| inner_hash.each { |k, v| #do stuff } } -
您的“所需哈希”无效,因为
:和其余部分之间有空格。即使它是“有效的”,愿望也会导致Array。 -
“将哈希数组转换为哈希”是什么意思?数组有一系列单独的元素,但散列必须为每个元素有一个不同的 Key 和一个 Value。那么这种转换对您来说是什么样的,为什么它是必要的/它将如何解决您的问题?如果您希望将每个散列对象转换为数组,您可以使用
array.map do |o| o.to_a end(但这似乎很奇怪)。你对你正在迭代的元素做了什么来得到那个错误?这听起来更像是您在遍历数组时尝试对散列元素执行的操作的问题。
标签: arrays ruby-on-rails ruby hash