0, "B"=> 0, "C"=> 1, "D"=> 3, "E"=> 0} 而且我希望这个散列没有重复值对。例如,期望的输出是: { "A"=> 0, "C"-6ren">
gpt4 book ai didi

ruby - 如何从 ruby​​ 中的散列中获得不同的键值对

转载 作者:太空宇宙 更新时间:2023-11-03 17:32:30 25 4
gpt4 key购买 nike

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

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

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

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

最佳答案

  1. 转换为 Array,使用 uniq 并转换回 Hash:

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

    some_hash.invert.invert
  3. 使用设置:

    require 'set'
    set = Set.new
    some_hash.select{ |_,v| !set.include?(v).tap{ set << v } }

注意#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)

关于ruby - 如何从 ruby​​ 中的散列中获得不同的键值对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30267821/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com