【问题标题】:Merge a Hash and an Array in Ruby to form a Hash and add some string to the Array values to be seen in final Hash在 Ruby 中合并 Hash 和 Array 以形成 Hash 并将一些字符串添加到 Array 值中以在最终 Hash 中看到
【发布时间】:2014-09-28 03:12:47
【问题描述】:

需要用用户提供的值作为散列和数组形成散列......结束散列应该将数组项作为键并添加一些额外的字符串以形成可接受的散列,然后与如果在其中的哈希中碰巧有重复的键,则最初提供的哈希会优先考虑数组项

        argument1 = {
             'key1' => 'value1',
             'key2' => 'value2',
             'C'    => 'value3',
        }
        argument2 = ["X","key2","Y"]

需要在数组项中添加一个键和一个值字符串,因为它们是

         X => {
             'added_string' => 'added_string2'
         }

数组中的 key2 和 Y 相同

上面应该与原始参数1合并以具有以下输出

       result => {
              'key1' => 'value1',
              'C'    => 'value3',
               'X' => {'added_string' => 'added_string2'},
               'Y' => {'added_string' => 'added_string2'},
               'key2' => {'added_string' => 'added_string2'},
       }

argument1 中的key2 字段被覆盖,因为它在argument2 数组中是重复的,并且其内容设置为argument2 中其他数组项的内容

【问题讨论】:

  • 你有没有尝试过?
  • 我有这个论点2.每个都做|value| result1[value] = Hash.new result1[value]['string '] = 'string2' end ... 然后我将它与 argument1 合并,如 finalresult = argument1.merge!(result1) ... 但是这不会创建一个格式良好的哈希结果是 finalresult => {...X => string1string2 ...} 而不是 {...X => {string1 => string2...}
  • 谢谢。最好编辑您的问题并添加您尝试过的内容,而不是添加评论。你可以更好地格式化它,它表明你已经尝试解决问题,而不是要求人们为你做你的工作。

标签: ruby-on-rails ruby arrays hash puppet


【解决方案1】:
argument1 = {
  'key1' => 'value1',
  'key2' => 'value2',
  'C'    => 'value3',
}
argument2 = ["X","key2","Y"]

added = { 'added_string' => 'added_string2' }


puts argument1.merge(
  Hash[argument2.zip([added] * argument2.size)]
)

# Hash[:a, :b, :c, :d] => { a: :b, c: :d }
# [:a].zip([:b]) => [[:a, :b]]
# [:a] * 3 => [:a, :a, :a]

【讨论】:

  • Konole 开始测试,谢谢,很高兴告诉你输出
  • 已将表达式等同于一个变量,但它以任何方式生成一个字符串以确保最终变量是一个哈希?
  • @GideonMaina 我不明白你的意思。你能解释一下吗?
  • assigning variable = puts argument1.merge( Hash[argument2.zip([add] * argument2.size)] ) ... 生成一个字符串变量而不是哈希,因为我想使用哈希对于木偶,我无法让它成为 HASH?但在合并时它做得很完美
  • puts 是一种将(内插)字符串打印到输出(主要是标准输出)的 ruby​​ 方法。用你的分配替换puts,它会起作用:variable = argument1.merge(Hash[argument2.zip([add] * argument2.size)])
猜你喜欢
  • 2012-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-17
  • 2014-09-12
  • 2015-02-28
  • 1970-01-01
  • 2014-01-26
相关资源
最近更新 更多