Maneira eficiente de clonar um HashSet <T>?
Alguns dias atrás, eu respondiuma pergunta interessante no SO sobreHashSet<T>
. Uma possível solução envolveu a clonagem do hashset e, na minha resposta, sugeri fazer algo assim:
HashSet<int> original = ...
HashSet<int> clone = new HashSet<int>(original);
Embora essa abordagem seja bastante direta, suspeito que seja muito ineficiente: o construtor do novoHashSet<T>
precisa adicionar separadamente cada item do hashset original everifique se ainda não está presente. Isso é claramente uma perda de tempo: como a coleção de fontes é umaISet<T>
, é garantido que não contém duplicatas. Deve haver uma maneira de tirar proveito desse conhecimento ...
Idealmente,HashSet<T>
deve implementarICloneable
, mas infelizmente não é o caso. Eu também verifiquei com o Reflector para ver se oHashSet<T>
O construtor fez algo específico se a coleção de origem era um hashset, mas não. Provavelmente isso poderia ser feito usando a reflexão em campos particulares, mas isso seria um truque feio ...
Então, alguém surgiu com uma solução inteligente para clonar um hashset com mais eficiência?
(Observe que essa pergunta é puramente teórica, não preciso fazer isso em um programa real)