2017-10-04 132 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!