Given that a hash is not ordered, is this reliable? h = { :a=>1, :b=>2 } Struct.new(*h.keys).new(*h.values) => #<struct #<Class:0xb7aead00> a=1, b=2> T.