鉴于此哈希:
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 }
也就是说,我想从散列的开头和结尾删除零值。
答案 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中键的顺序,这不是一个好主意。
也许选择和拒绝的组合会更好。