如何在ruby中使用hash中的不同键值对

时间:2015-05-15 20:02:34

标签: ruby hash

我得到了以下格式的哈希:

{"A"=> 0, "B"=> 0, "C"=> 1, "D"=> 3, "E"=> 0}

我希望这个哈希没有重复的值对。 例如,期望的输出是:

{ "A"=> 0, "C"=>1, "D"=>3 }

2 个答案:

答案 0 :(得分:3)

  1. 转换为数组,使用uniq并转换回哈希

    Hash[some_hash.to_a.uniq(&:last)]
    
  2. 反转键和值并反转:

    some_hash.invert.invert
    
  3. 使用set

    require 'set'
    set = Set.new
    some_hash.select{ |_,v| !set.include?(v).tap{ set << v } }
    
  4. 注意#1 /#3是第一个元素,而#2是最后一个元素

    h = {a: 0, b: 1, c: 0, d: 2, e: 1}
    Hash[h.to_a.uniq(&:last)] # {a: 0, b: 1, d: 2}
    h.invert.invert           # {c: 0, d: 2, e: 1}
    

    基准('a'..'zzz'哈希)

            user     system      total        real
     #1   0.040000   0.010000   0.050000 (  0.040964)
     #2   0.010000   0.000000   0.010000 (  0.002194)
     #3   0.010000   0.000000   0.010000 (  0.010814)
    

答案 1 :(得分:2)

你可以这样做:

indexOf()