2017-10-04 2 views
-1

J'ai un tableau de hachage de hachage. Voici ce que la structure ressemble à:Conversion d'un tableau de hachages de hachages Ruby

items = [{"Spaghetti & Meatballs"=> 
    { 
    :menu_item_name=>"Spaghetti & Meatballs", 
    :quantity=>192, 
    :category=>"delicious"}}, 
{"Bananas"=> 
    { 
    :menu_item_name=>"Bananas", 
    :quantity=>187, 
    :category=>"sweet"}}] 

Je veux faire ce qui suit:

items["Bananas"] 

et retourner le hachage à la banane.

+0

vous n'avez pas besoin du tableau, vous pouvez avoir 'items = {" Bananas "=> {menu_item_name:" Bananas ", quantité: 187}," Spaghetti "=> {menu_item_name:" Spaghetti ", quantité: 192 }} ' –

+0

Voici comment mes données sont envoyées à moi, c'est dans un tableau. Je ne peux pas changer ça. – tnaught

Répondre

0

Avec:

items = [{"Spaghetti & Meatballs"=> 
    { 
    :menu_item_name=>"Spaghetti & Meatballs", 
    :quantity=>192, 
    :category=>"delicious"}}, 
{"Bananas"=> 
    { 
    :menu_item_name=>"Bananas", 
    :quantity=>187, 
    :category=>"sweet"}}]  

Essayez:

items.find{|hsh| hsh.keys.first == "Bananas"} 

Dans la console:

2.3.1 :011 > items.find{|hsh| hsh.keys.first == "Bananas"} 
=> {"Bananas"=>{:menu_item_name=>"Bananas", :quantity=>187, :category=>"sweet"}} 

Si vous voulez, vous pouvez assigner à une variable:

bananas_hsh = items.find{|hsh| hsh.keys.first == "Bananas"} 

Encore une fois, dans la console:

2.3.1 :012 > bananas_hsh = items.find{|hsh| hsh.keys.first == "Bananas"} 
=> {"Bananas"=>{:menu_item_name=>"Bananas", :quantity=>187, :category=>"sweet"}} 
2.3.1 :013 > bananas_hsh 
=> {"Bananas"=>{:menu_item_name=>"Bananas", :quantity=>187, :category=>"sweet"}} 
0

Vous souhaitez items["Banana"] retourner un ensemble d'éléments (hash) de items qui ont un « bananes » clés. Considérons comment cela serait fait.

Depuis items.class #=> Array nous devrions définir une méthode d'instance Array#[] pour ce faire. Il y a un problème, cependant: Array a déjà la méthode d'instance Array#[], qui est utilisée comme ceci: [1,2,3][1] #=> 2, où l'argument est l'index du tableau dont la valeur doit être retournée. À condition que les clés du hachage ne soient pas numériques, nous pourrions faire ce qui suit.

class Array 
    alias :left_right_paren :[] 
    def [](x) 
    if x.is_a?(Integer) 
     left_right_paren(x) 
    else 
     find { |h| h.keys.include?(x) } 
    end 
    end 
end 

[1,2,3][1] 
    #=> 2 
items["Bananas"] 
    #=> {"Bananas"=>{:menu_item_name=>"Bananas", :quantity=>187, :category=>"sweet"}} 

Tout ce qui reste est de décider si ce serait une bonne idée. Mon avis? YUK !!