8
votes

Comment déplacer les attributs dans Ruby Hash "Up" Un niveau

 => {:name=>"John", :physical => {:age=>25, :weight=>150}} 

0 commentaires

3 Réponses :


9
votes

Essayez ceci:

x = x.merge(x.delete(:data))


2 commentaires

Vous ne voulez pas dire : données , pas : physique ?


Ou fusion! pour éviter l'extra copier.



2
votes

J'irais après cela de cette façon: xxx


0 commentaires

0
votes

Basé sur la réponse de @ micha% C3% ABL-WitRant et parce que j'en avais besoin sur une matrice imbriquée, voici la fonction de la tâche de manière récursive:

def levelUpAttribute(attr,myHash,parent = nil)

  if myHash.is_a?(Hash)
    #level up matching keys
    myHash = myHash.merge(myHash.delete(attr) || {})
    #recursion
    myHash.each do |key, value|
      myHash[key] = levelUpAttribute(attr,value,key)
    end
  end

  myHash

end

x = levelUpAttribute(:data,x)


0 commentaires