【问题标题】:Convert array of hashes to hashes without array and overwrite [closed]将散列数组转换为没有数组的散列并覆盖[关闭]
【发布时间】: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


【解决方案1】:

您在keyvalue 之间添加了一个额外的空格,即: sku,我认为这是一个拼写错误。您可以通过以下方式解析数据。

 array_of_hashes = [{:sku=>"1234", :name=>"Test"}, {:sku=>"5678", :name=>"Test2"}]
 array_of_hashes.each do |hash|
   puts "sku = #{hash[:sku]} , name = #{hash[:name]}"
   # Do your stuff
 end

【讨论】:

    猜你喜欢
    • 2018-08-07
    • 2015-06-12
    • 2020-06-29
    • 2015-07-01
    • 1970-01-01
    • 2018-12-28
    • 2013-05-16
    • 1970-01-01
    • 2011-04-16
    相关资源
    最近更新 更多