从 Ruby 哈希中转移一个特定的匹配键值对

Posted

技术标签:

【中文标题】从 Ruby 哈希中转移一个特定的匹配键值对【英文标题】:Shifting a specific matching key-value pair from Ruby hash 【发布时间】:2012-04-21 06:18:04 【问题描述】:

我有一个 Ruby 哈希:

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

我想从这个哈希中shift 特定的键值对。 例如如果我对"milestones"标签感兴趣,那么哈希上的shift会给我:

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

这正是我想要的。

除了我不知道如何选择特定的键值对。

我可以写一些东西来遍历哈希,直到找到匹配的键,然后调用shift,但我假设有一个更干净的“Ruby 方式”来做到这一点:)

【问题讨论】:

【参考方案1】:

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"

【讨论】:

谢谢 :) 是否还有一种方法可以从上面的哈希中获取键值对而不从哈希中删除键值对? 当然,只需使用索引器(请参阅更新的答案)。此外,如果您想在哈希中保留密钥,则不应将其称为 shift,因为它暗示了破坏性行为(恕我直言)。

以上是关于从 Ruby 哈希中转移一个特定的匹配键值对的主要内容,如果未能解决你的问题,请参考以下文章

HashMapHashTableConcurrentHashMap详解

redis笔记

RedisRedis 哈希 Hash 键值对集合操作 ( 哈希 Hash 键值对集合简介 | 查询操作 | 增加操作 | 修改操作 )

Ruby更改哈希的键值

使用 ruby​​ 和正则表达式从字符串中提取键值对

Redis命令