hash = {"p1"=>56, "p2"=>56, "p3"=>0, "p4"=>56, "p5"=>56, "p6"=>64, "p7"=>0}
p Hash[hash.sort_by{|k,v| v}.reverse] # gives
{"p6"=>64, "p5"=>56, "p4"=>56, "p2"=>56, "p1"=>56, "p3"=>0}
但我想输出如下
{"p6"=>64, "p1"=>56, "p2"=>56, "p4"=>56, "p5"=>56}
另外,最终哈希值不需要键为零。
p Hash[
hash.reject { |_, v| v.zero? }.sort do |kv1, kv2|
(val = kv1.last <=> kv2.last).zero? ? kv2.first <=> kv1.first : val
end.reverse]
#⇒ {"p6"=>64, "p1"=>56, "p2"=>56, "p4"=>56, "p5"=>56}
UPD使用@CarySwoveland建议的块变量表示,并删除多余的变量reverse
:
p Hash[
hash.reject { |_, v| v.zero? }.sort do |(k1,v1), (k2,v2)|
(val = v2 <=> v1).zero? ? k1 <=> k2 : val
end
]
#⇒ {"p6"=>64, "p1"=>56, "p2"=>56, "p4"=>56, "p5"=>56}
注意:上面将对相同值的键进行排序,而下面的@Cary答案则不会。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句