Comment utiliser les Hashtables / HashSets dans .NET?
J'ai une liste d'environ 9000 produits, et certains peuvent avoir des doublons.
Je voulais faire une table de hachage de ces produits avec les produits du numéro de série de leur clé pour que je puisse trouver les doublons facilement.
Comment peut-on aller sur l'aide d'une table de hachage en C#/.NET? Serait un HashSet être plus approprié?
Finalement, je voudrais une liste comme:
- Clés De Série: 11110 - Contient: Produit1
Clé De Série: 11111 - Contient: Product3, Product6, Product7
Clé De Série: 11112 - Contient: Product4
Clé De Série: 11113 - Contient: Product8, Product9
J'ai une liste de tous les produits, et ils sont regroupés par ceux qui ont des numéros de série en double. Qu'est-ce que la "bonne" façon de faire cela?
source d'informationauteur Biro
Vous devez vous connecter pour publier un commentaire.
Je pense que le Dictionnaire est recommandé de classe pour des trucs comme ça.
il serait quelque chose comme ceci dans votre cas
(en utilisant la série de la chaîne de clé)
Une table de hachage est une sorte de dictionnaire, et un hashset est une sorte de jeu. Ni les dictionnaires, ni directement résoudre votre problème - vous avez besoin d'une structure de données qui détient de plusieurs objets pour une clé.
Ces bases de données sont souvent appelés multimaps. Vous pouvez en créer un en utilisant simplement une table de hachage où le type de clés sont des nombres entiers et les types de valeurs sont des ensembles d'un certain type (par exemple, hashsets...).
Alternativement, vous pouvez regarder existant multimap solutions, comme ici:
multimap .NET.
Pour plus d'informations sur l'utilisation de tables de hachage, vous pouvez le vérifier sur MSDN: http://msdn.microsoft.com/en-us/library/system.collections.hashtable.aspxet il ya beaucoup d'autres tutoriels de recherche sur l'aide de "table de hachage" ou "Dictionnaire".
Un Dictionnaire générique serait la suite de ce meilleur, je pense. Le Code pourrait ressembler à quelque chose comme ceci:
Une excellente option maintenant disponible dans .NET est le Recherche classe. À partir de la documentation MSDN:
Il quelques différences entre une Recherche et Dictionnaire(De la Liste). À savoir, la Recherche est immuable (ne pouvez pas ajouter ou supprimer des éléments ou des clés après sa création). Selon la façon dont vous prévoyez d'utiliser vos données, la Recherche peut être avantageux par rapport à GroupBy().
Vous devez d'abord définir votre "Clé Primaire", un ensemble de champs qui sont propres à chaque objet. Je suppose que
Key-Serial
partie de cette série, mais il doit y en avoir d'autres. Une fois que vous définissez que "Clé Primaire", vous pouvez définir une structure qui représente unKey Value
et de l'utiliser comme clé d'un dictionnaire contenant vos produits.Exemple:
Si vous voulais simplement avoir une liste de doublons, vous pouvez:
prendre créer un
Dictionary<T>
de vos entrées de la table (nous allons l'appelerIEnumerable<T>
(qui ne tient pas compte des doubles de clés)créer un
Hashset<T>
de la mêmeIEnumerable<T>
(qui conserve les doubles des clés, tant que la ligne n'est pas la même)dictionary.Values
appelanthashset.Remove(value)
pour chaque valeurCe qui est à gauche dans le
hashset
est les doublons.