【问题标题】:How can I delete duplicate values from a hash of hash如何从哈希哈希中删除重复值
【发布时间】:2023-04-09 12:48:01
【问题描述】:

我需要一个唯一的哈希值,其中 "one" 的值不应重复。

例如,

hash= {"1"=>{"one"=>1,"two"=>2},
   "2"=>{"one"=>1,"two"=>3},
   "3"=>{"one"=>2,"two"=>3},
   "4"=>{"one"=>1,"two"=>2}}

那么结果应该是,

hash= {"1"=>{"one"=>1,"two"=>2},
    "3"=>{"one"=>2,"two"=>3}}

【问题讨论】:

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


    【解决方案1】:

    (可读)单行:

    hash.to_a.uniq {|(_,v)| v['one']}.to_h
    # {"1"=>{"one"=>1, "two"=>2}, "3"=>{"one"=>2, "two"=>3}}
    

    【讨论】:

      【解决方案2】:
      ones_values = {}
      hash.delete_if do |key, value|
        ones_values[value["one"]] ? true : (ones_values[value["one"]] = true) && false
      end
      

      【讨论】:

        【解决方案3】:
        hash.inject({}) do |memo, (k, v)| 
          memo[k] = v unless memo.values.any? do |mv| 
                               mv['one'] == v['one']
                             end
          memo
        end
        
        #⇒ {
        #    "1" => {
        #      "one" => 1,
        #      "two" => 2
        #    },
        #    "3" => {
        #      "one" => 2,
        #      "two" => 3
        #    }
        #  }
        

        【讨论】:

        • 对于上面的一组值,答案是好的。但是,当我在 rails 中为一些哈希实现它时,我收到以下消息: undefined method `values' for nil:NilClass
        • 上面的代码不能产生这个错误信息。在 Rails 中实现它时引入了一些错误。您似乎忘记从每个循环迭代中返回备忘录。
        猜你喜欢
        • 1970-01-01
        • 2015-04-25
        • 2018-07-27
        • 1970-01-01
        • 2013-10-09
        • 2015-11-17
        • 2016-01-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多