我有一系列哈希哈希。结构如下:
items = [{"Spaghetti & Meatballs"=>
{
:menu_item_name=>"Spaghetti & Meatballs",
:quantity=>192,
:category=>"delicious"}},
{"Bananas"=>
{
:menu_item_name=>"Bananas",
:quantity=>187,
:category=>"sweet"}}]
我想做以下事情:
items["Bananas"]
并在香蕉上返回哈希。
答案 0 :(得分:1)
使用:
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"}}
答案 1 :(得分:1)
您希望items["Banana"]
返回items
的{{1}}元素数组(哈希值),这些元素具有键#34; Bananas"。让我们考虑如何做到这一点。
从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"}}
剩下的就是决定这是不是一个好主意。我的看法?议员!!