0

鉴于此哈希:

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 }

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

4

3 回答 3

2

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

h.delete_if{|k,v| v == 0 ? true : break }
h.reverse_each{|k,v| v == 0 ? h.delete(k) : break }
于 2012-12-17T15:25:21.480 回答
1

改进了 CubaLibre 的回答:

Hash[h.drop_while { |k,v| v == 0 }.reverse.drop_while { |k,v| v == 0 }.reverse]
于 2012-12-17T16:26:03.807 回答
0
Hash[h.drop_while {|k,v| v == 0 }.take_while {|k,v| v != 0}]

此版本对 Hash 中的键顺序进行了假设,这不是一个好主意。

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

于 2012-12-17T15:35:15.710 回答