【问题标题】:Shifting a specific matching key-value pair from Ruby hash从 Ruby 哈希中转移一个特定的匹配键值对
【发布时间】: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 方式”来做到这一点:)

【问题讨论】:

    标签: 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,因为它暗示了破坏性行为(恕我直言)。
    猜你喜欢
    • 2017-12-11
    • 2015-03-16
    • 2017-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-25
    • 1970-01-01
    相关资源
    最近更新 更多