簡體   English   中英

轉換哈希數組Ruby的哈希數組

[英]Converting an Array of hashes of hashes Ruby

我有一系列的哈希值。 結構如下所示:

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

我要執行以下操作:

items["Bananas"] 

然后將哈希返回給香蕉。

帶有:

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

您希望items["Banana"]返回具有鍵“ Bananas”的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"}}

剩下的就是確定這是否是一個好主意。 我的意見? K!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM