By cannibalizing implementation details of Dictionary from the standard library (which should be exposed as part of a hashtable construction kit, but that's a separate issue) we could avoid storing a dictionary plus an array, and (I think) avoid storing keys twice.