2017-10-04 169 views
-1

我有一個哈希散列數組。下面是結構的樣子:轉換散列哈希數組Ruby 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」,quantity:187},'Spaghetti'=> {menu_item_name:「意大利麪條」,數量: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!