【问题标题】:ruby slice with array cirteria具有数组标准的红宝石切片
【发布时间】:2014-02-02 20:08:05
【问题描述】:

如何通过数组查找 ruby​​ 中的哈希创建切片,如下所示:

info         = { :key1 => "Lorem", :key2 => "something...", :key3 => "Ipsum" }
needed_keys  = [:key1, :key3]
info         = info.slice( needed_keys )

我想收到:

{ :key1 => "Lorem", :key3 => "Ipsum" }

【问题讨论】:

    标签: ruby ruby-on-rails-3 hash ruby-on-rails-4


    【解决方案1】:
    info.select{|k,_| needed_keys.include? k }
    

    【讨论】:

    • 虽然不那么直接,但另一种纯 Ruby 方式:Hash[needed_keys.zip(info.values_at(*needed_keys))].
    【解决方案2】:

    你需要扩展数组:

    info.slice(*needed_keys)
    

    【讨论】:

      【解决方案3】:

      ActiveSupport 的 Hash#slice 不将键数组作为参数,您必须将要提取的键作为单个参数传递,例如通过 splatting 您的 needed_keys 数组:

      info.slice(:key1, :key3)
      # => {:key1=>"Lorem", :key3=>"Ipsum"}
      
      info.slice(*needed_keys)
      # => {:key1=>"Lorem", :key3=>"Ipsum"}
      

      【讨论】:

      • 如果有人使用数组作为键,它可能需要一个数组。 :)
      • Hash#slice 来自 ActiveSupport,请在您的回答中包含此内容
      猜你喜欢
      • 2012-03-01
      • 1970-01-01
      • 2013-05-20
      • 2011-01-15
      • 2012-09-13
      • 1970-01-01
      • 1970-01-01
      • 2014-01-05
      • 1970-01-01
      相关资源
      最近更新 更多