2012-04-08 236 views
1

特定匹配的鍵值對我有一個Ruby散列:移從紅寶石散列

@tags = { "project_status" => { "title" => "Project status" }, 
      "milestones"  => { "title" => "Milestones"}, 
      "lessons"  => { "title" => "Lessons"}, 
      "tasks"   => { "title" => "Tasks"} } 

我想shift特定鍵值對出該散列的。 例如如果我感興趣的"milestones"標籤,然後哈希shift會給我:

=> ["milestones", {"title"=>"Milestones"}] 

這就是我想要的東西。

除了,我不能找出如何選擇一個特定的鍵值對。

我可以寫的東西通過哈希迭代,直到我找到了匹配的密鑰,然後調用shift,但我假設有一個更清潔的「紅寶石的方式」來做到這一點:)

回答

4

delete可能就是你正在尋找。它消除了從散列相應的鍵(而shift刪除數組項),用於此:)

tags = { "project_status" => { "title" => "Project status" }, 
      "milestones"  => { "title" => "Milestones"}, 
      "lessons"  => { "title" => "Lessons"}, 
      "tasks"   => { "title" => "Tasks"} } 

def shift hash, key 
    [key, hash.delete(key)] # removes key/value pair 
    # [key, hash[key]] # leaves key/value pair 
end   

shift tags, 'milestones' # => ["milestones", {"title"=>"Milestones"}] 
tags # => {"project_status"=>{"title"=>"Project status"}, "lessons"=>{"title"=>"Lessons"}, "tasks"=>{"title"=>"Tasks"}} 
+0

由於有也是一種方式抓住從散列鍵值對,如上面不除去鍵值對從哈希? – 2012-04-08 15:16:04

+0

當然,只需使用索引器(請參閱更新的答案)。另外,如果你想保留哈希鍵,你不應該把它稱爲「移位」,因爲它意味着破壞行爲(恕我直言)。 – 2012-04-08 15:32:07

+0

太棒了,謝謝塞爾吉奧! – 2012-04-08 20:37:18