【问题标题】:Can't push in array in recursive function in Ruby / RoR [duplicate]无法在 Ruby / RoR 的递归函数中推入数组 [重复]
【发布时间】:2018-11-22 03:26:09
【问题描述】:

我想在 Ruby On Rails 中操作以下语言环境 .yml 文件:

fr: back: Retour signup: Inscription helpers: submit: create: "Créer votre %{model}" hello: world: "Bonjour le monde"

所以我在我的控制器中解析它:

@yml_hash = YAML.load_file("config/locales/en.yml")

然后我在 html.erb 文件中使用以下帮助程序对其进行处理:

module TranslationHelper

    def render_hash(hash)
        return ihash(hash)
    end

    def ihash(h, key = [], result = [])
        h.each_pair do |k,v|
            if v.is_a?(Hash)
                key << k
                ihash(v, key, result)
            else
                result << {full_key: key, key: k, value: v}
            end
        end
        result
    end

end

它会返回输出:

[{:full_key=>["fr", "helpers", "submit", "hello"], :key=>"back",
  :value=>"Retour"},
 {:full_key=>["fr", "helpers", "submit", "hello"], :key=>"signup",
  :value=>"Inscription"},
 {:full_key=>["fr", "helpers", "submit", "hello"], :key=>"create",
  :value=>"Créer votre %{model}"},
 {:full_key=>["fr", "helpers", "submit", "hello"], :key=>"world",
  :value=>"Bonjour le monde"}]

但实际上我的目标是在散列中拥有一个值的完整键,如下所示:

[{:full_key=>["fr"], :key=>"back", :value=>"Retour"},
 {:full_key=>["fr"], :key=>"signup", :value=>"Inscription"},
 {:full_key=>["fr", "helpers", "submit"], :key=>"create", :value=>"Créer votre %{model}"},
 {:full_key=>["fr", "hello"], :key=>"world", :value=>"Bonjour le monde"}]

有没有什么方法可以在我的函数中处理哈希以获得那种结果?

谢谢。

【问题讨论】:

    标签: ruby-on-rails ruby recursion hash yaml


    【解决方案1】:

    我认为您需要使用clone 方法来创建新数组,因为引用相同的数组对象(key &lt;&lt; k



    正确:

    def ihash(h, key = [], result = [])
      h.each_pair do |k,v|
        if v.is_a?(Hash)
          new_key = key.clone
          new_key << k
          ihash(v, new_key, result)
        else
          result << {full_key: key, key: k, value: v}
        end
      end
      result
    end
    


    编码愉快!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-15
      • 1970-01-01
      • 2016-05-06
      • 1970-01-01
      • 2018-05-07
      • 2022-01-03
      • 2021-06-01
      • 2020-08-24
      相关资源
      最近更新 更多