2017-10-04 16 views
-1

ハッシュのハッシュの配列を持っています。私は次の操作を実行したいハッシュのハッシュの配列を変換するRuby

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

:ここのような構造が見えるものである

items["Bananas"] 

とバナナのハッシュを返します。

+0

あなたは 'items = {" Bananas "=> {menu_item_name:" Bananas "、数量:187}、" Spaghetti "=> {menu_item_name:" Spaghetti "、数量:192 }} ' –

+0

これは私のデータが私に送られる方法です。私はこれを変更することはできません。 – tnaught

答えて

0

付:

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

試してみてください。コンソールで

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

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

あなたがしたい場合は、変数に割り当てることができます:

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

ここでも、コンソールに:

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

あなたはitems["Banana"]キー「バナナ」を持っているitemsの要素(ハッシュ)の配列を返すようにしたいと思います。それがどのように行われるのかを考えてみましょう。

items.class #=> Arrayから、インスタンスメソッドArray#[]を定義する必要があります。しかし、問題があります:ArrayにはすでにインスタンスメソッドArray#[]があります。このように使用されるのは[1,2,3][1] #=> 2です。引数は値が返される配列のインデックスです。

ただし、ハッシュのキーは数値ではありませんが、次のことができます。

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"}} 

残っていることは、これが良い考えであるかどうかを判断することです。私の意見? YUK !!

関連する問題