Konwersja kluczy i warości w Hashu

Takie coś dzisiaj napotkałem na swojej drodze.
hash typu: {“1”=>“1”, “2”=>“1”} zamienić na {1=>1, 2=>1} w ruby 1.9.2
zarówno klucze i wartości zamienić na integere lub usunąć jeśli się nie da.
Najpierw urodziłem takiego stworka:

sectors = hash.each_with_object({}) { |pair, sectors| (sectors[Integer(pair.first)] = Integer(pair.last)) rescue() }

A nastepnie takiego:

sectors = hash.inject({}) { |sectors, (k, v)| (sectors[Integer(k)] = Integer(v)) rescue(nil); sectors }

Ma ktoś pomysł jak ładniej to zrobić? A może jest coś gotowego np. Aktywnym Suporcie

Taki jednolinijkowiec

Hash[*hash.to_a.flatten.map(&:to_i)]

W 1.9 możesz zrobić od razu

Hash[*hash.flatten.map(&:to_i)]

Metoda to_i odpada bo

"s".to_i => 0

A ja takie pary które mają nie liczby w jako klucz lub wartość chęc wyeliminować.
Ale tak jest git:

Hash[*hash.map{|k,v| [Integer(k), Integer(v)] rescue []}.flatten]

http://rubyworks.github.com/facets/doc/api/core/Hash.html#rekey--method