如何修剪哈希?

时间:2012-12-17 15:18:30

标签: ruby

鉴于此哈希:

h = { "01"=>0, "02"=>0, "03"=>5, "04"=>6, "05"=>0, "06"=>0, "07"=>0, "08"=>7, "09"=>8, "10"=>0, "11"=>0, "12"=>0 }

如何修剪它以获得此结果:

h = { "03"=>5, "04"=>6, "05"=>0, "06"=>0, "07"=>0, "08"=>7, "09"=>8 }

也就是说,我想从散列的开头和结尾删除零值。

3 个答案:

答案 0 :(得分:2)

您可以使用break来停止执行。

h.delete_if{|k,v| v == 0 ? true : break }
h.reverse_each{|k,v| v == 0 ? h.delete(k) : break }

答案 1 :(得分:1)

改进了CubaLibre的回答:

Hash[h.drop_while { |k,v| v == 0 }.reverse.drop_while { |k,v| v == 0 }.reverse]

答案 2 :(得分:0)

Hash[h.drop_while {|k,v| v == 0 }.take_while {|k,v| v != 0}]

这个版本假设关于Hash中键的顺序,这不是一个好主意。

也许选择和拒绝的组合会更好。