Por que ter HashSet mas não definido em c #?
Meu entendimento é que C # tem em algum sentidoHashSet
eset
tipos. Eu entendo o queHashSet
é. Mas por queset
é uma palavra separada? Por que nem todo conjunto éHashSet<Object>
?
Por que o C # não tem genéricoSet
tipo, semelhante aDictionary
tipo? Do meu ponto de vista, gostaria de ter um conjunto com desempenho padrão de pesquisa / adição / exclusão. Eu não me importo muito se é realizado com hashes ou outra coisa. Então, por que não criar uma classe set que seria realmente implementada como umHashSet
nesta versão do c # mas talvez um pouco diferente em uma versão futura?
Ou porque não, pelo menos, interfaceISet
?
Aprendi graças a todos que responderam abaixo:ICollection
implementa muito do que você esperaria deISet
. Do meu ponto de vista,ICollection
implementaIEnumerable
enquanto conjuntos não precisam ser enumeráveis - exemplo: conjunto de números reais entre 1 e 2 (ainda mais, conjuntos podem ser gerados dinamicamente). Eu concordo que este é um discurso menor, já que 'programadores normais' raramente precisam de conjuntos incontáveis.
Ok, acho que entendi.HashSet
foi absolutamente destinado a ser chamadoSet
mas a palavraSet
é reservado em algum sentido. Mais especificamente, os criadores da arquitetura .NET queriam ter um conjunto consistente (sic!) De classes para diferentes idiomas. Isso significa que todos os nomes da classe padrão não devem coincidir com nenhuma palavra-chave nos idiomas .NET. A palavraSet
, no entanto, é usado em VB.NET, que é na verdade insensível a maiúsculas e minúsculas (é?) por isso, infelizmente, não há espaço para manobras lá.
Mistério resolvido :)
EpílogoA nova resposta por Alex Y. links para oPágina do MSDN que descreve a próxima interface do .NET 4.0ISet
que se comporta praticamente como eu pensei que deveria e é implementado porHashedSet
. Final feliz.