2

誰かが私にこれを行う方法を提案できますか? (すべては件名にあります:D)

私が欲しいのは、「パス」を使用して、サブキーのスーツとして変換することです.

例: 私はそのパラメータを持っています: path = "earth/animal/human/men/young/" value = "martin" そして私はしたい:

  `Global_hash = { earth => { human => { men => { young => "martin"
                                                }
                                       }
                            }
                 }`

path = "earth/animal/human/men/old/" value = "ジョン" そして私が欲しい:

 Global_hash = { earth => { human => { men => { young => "martin",
                                                old   =>  "John" 
                                         }
                                }
                     }
          }

他を追加

path = "earth/animal/human/women/old/" value = "イブ" そして私は欲しい:

`Global_hash = { earth => { human => { men   => { young => "martin",
                                                  old      =>  "John"
                                                },
                                       women => { old => "Eve"
                                                }
                                     }
                          }
               }

`

最終的な目標は、パスと値の 2 つのパラメーターを持つ yml ファイルを生成する方法です。

例は次を生成します: `

earth:
  animal:
    human:
      men:    
        young: "martin"
        old: "John"
      women:
        old: "Eve"

` パスのおかげで、すべてのオブジェクトがセクションごとにソートされた yml ファイルを持つことができます。

事前に感謝します

4

2 に答える 2

5
path = 'earth/animal/human/men/young/'
value = 'martin'
path.split('/').reverse.reduce(value){ |r, e| {e.to_sym => r} }
于 2012-07-13T11:38:20.107 に答える
1

関数再帰的アプローチ:

def insert(hash, path, value)
  head, *tail = path
  if tail.empty?
    hash.merge(head => value)
  else
    h = insert(hash[head] || {}, tail, value)
    hash.merge(head => hash.has_key?(head) ? hash[head].merge(h) : h)
  end
end

h1 = insert({}, "animal/human/women/old".split("/"), "Eve")
# {"animal"=>{"human"=>{"women"=>{"old"=>"Eve"}}}}

h2 = insert(h1, "animal/human/men/old".split("/"), "Adam")
# {"animal"=>{"human"=>{"women"=>{"old"=>"Eve"}, 
#                       "men"=>{"old"=>"Adam"}}}}

h3 = insert(h2, "animal/chimpanzee/smart".split("/"), "Caesar")
# {"animal"=>{"human"=>{"women"=>{"old"=>"Eve"}, 
#                       "men"=>{"old"=>"Adam"}}, 
#             "chimpanzee"=>{"smart"=>"Caesar"}}}
于 2012-07-13T12:51:29.443 に答える