【问题标题】:exclude elements from hash based on array根据数组从哈希中排除元素
【发布时间】:2015-11-13 22:47:20
【问题描述】:

我有一个哈希数组

x = [{:name=>'a', :value=1}, {:name=>'b', :value=2}, {:name=>'c', :value=3}]

和字符串数组

y = ["a", "c"]

如何根据 yx 中排除元素?所以最后我有x = [ {:name=>'b', :value=2} ]

【问题讨论】:

    标签: ruby


    【解决方案1】:

    使用Enumerable#reject

    x.reject {|h| y.include? h[:name]}
    # => [{:name=>"b", :value=>2}]
    

    注意:如果要修改原始对象,可以改用reject!

    【讨论】:

      【解决方案2】:

      虽然@Santhosh 提供的答案是绝对正确的,但在巨大的数组上它效率不高,因为每次迭代都在y 中查找。这可能会更快:

      xgr = x.group_by { |e| e[:name] }
      x - y.map { |e| xgr[e] }.flatten
      #⇒ [ {:name=>'b', :value=2} ]
      

      【讨论】:

        猜你喜欢
        • 2022-01-14
        • 1970-01-01
        • 2011-12-13
        • 1970-01-01
        • 2012-07-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多