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}]

このバージョンでは、ハッシュ内のキーの順序について想定していますが、これはお勧めできません。

おそらく、selectとrejectの組み合わせの方が読みやすくなります。

于 2012-12-17T15:35:15.710 に答える