2012-04-08 149 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