在循环中向多维Ruby散列添加新项

dojqjjoe  于 2022-11-04  发布在  Ruby
关注(0)|答案(1)|浏览(156)

将我的代码迁移到Ruby时,需要在多维哈希中使用新项来更新此哈希〉customers〉image〉

bannerhash = {
  "stooge": "larry",
  "toppings": [],
  "customers": [
    {
      "id": 1,
      "alt": "Image seo text",
      "image": {
        "label": "gid:///28663588552955",
        "image": "https://cdn.doma.com/s/files/1/0611/2064/3323/files/yellow-pillow-bedside-table_2000x.jpg?v=1637223489"
      },
      "mainsize": 100
    },
    {
      "id": 2,
      "alt": "Image seo text",
      "image": {
        "label": "gid:///28663588487419",
        "image": "https://cdn.doma.com/s/files/1/0611/2064/3323/files/bed-side-table_2000x.jpg?v=1637223489"
      },
      "mainsize": 100
    },
    {
      "id": 3,
      "alt": "image",
      "themeposition": "388506648827/posA",
      "image": {
        "label": "gid:///28663588585723",
        "image": "https://cdn.doma.com/s/files/1/0611/2064/3323/files/sunlight-creeps-through-a-bright-living-room_2000x.jpg?v=1637223489"
      },
      "mainsize": 87
    },
    {
      "id": 4,
      "alt": "short width",
      "themeposition": "home",
      "mainsize": 70,
      "image": {
        "label": "gid:///28663588454651",
        "image": "https://cdn.doma.com/s/files/1/0611/2064/3323/files/modern-and-stylish-design_2000x.jpg?v=1637223489"
      },
      "quickcss": "@import url(\'https://fonts.googleapis.com/css2?family=Comic+Neue:wght@300&display=swap\');\n.wrapper-4 .--description {font-family: \'Comic Neue\', cursive; }"
    }
  ]
}

要在循环中更新,则添加“newitem”键,其值在“image”内,如

{
  "stooge": "larry",
  "toppings": [],
  "customers": [
    {
      "id": 1,
      "alt": "Image seo text",
      "image": {
        "label": "gid:///28663588552955",
        "image": "https://cdn.doma.com/s/files/1/0611/2064/3323/files/yellow-pillow-bedside-table_2000x.jpg?v=1637223489",
        "newitem": "https://cdn.doma.com/s/files/1/0611/2064/3323/files/yellow-pillow-bedside-table_3300x.jpg?v=1637223489"
      },
      "mainsize": 100
    },
    {
      "id": 2,
      "alt": "Image seo text",
      "image": {
        "label": "gid:///28663588487419",
        "image": "https://cdn.doma.com/s/files/1/0611/2064/3323/files/bed-side-table_2000x.jpg?v=1637223489",
        "newitem": "https://cdn.doma.com/s/files/1/0611/2064/3323/files/bed-side-table_3300x.jpg?v=1637223489"
      },
      "mainsize": 100
    }
  ]
}

我的解决方案代码在每个循环中的ruby更新哈希时遇到了问题。首先,我捕获了带有“customers”键的内部哈希,并知道了索引和值,但是在如何将“newitem”添加到“customers”“image”哈希中时遇到了问题

if bannerhash.has_key?(:customers)
  puts "found"
  bannerhash.each_with_index do |(key, value), index|
    if key == :customers
      puts "index: #{index} | key: #{key} | value: #{value}"     
      # STACK Here bannerhash[key].each
    end 
  end
else
  puts "banners not found"
end
uidvcgyl

uidvcgyl1#

这看起来很简单,当我们可以直接访问:customers时,不需要遍历所有的键/值对来查找它。

if bannerhash.has_key?(:customers)
  bannerhash[:customers].each { |h| 
    h[:image][:newitem] = "https://cdn.doma.com/s/files/1/0611/2064/3323/files/yellow-pillow-bedside- table_3300x.jpg?v=1637223489"
  }
else
  puts "banners not found"
end

相关问题