鉴于此哈希:
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 }
也就是说,我想从哈希的开头和结尾删除零值。
鉴于此哈希:
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 }
也就是说,我想从哈希的开头和结尾删除零值。
您可以使用break
来停止执行。
h.delete_if{|k,v| v == 0 ? true : break }
h.reverse_each{|k,v| v == 0 ? h.delete(k) : break }
改进了 CubaLibre 的回答:
Hash[h.drop_while { |k,v| v == 0 }.reverse.drop_while { |k,v| v == 0 }.reverse]
Hash[h.drop_while {|k,v| v == 0 }.take_while {|k,v| v != 0}]
此版本对 Hash 中的键顺序进行了假设,这不是一个好主意。
也许选择和拒绝的组合会更好读。