Évitez d'ajouter des éléments en double à une liste C #
string[] lines3 = new string[100];
List<string> lines2 = new List<string>();
lines3 = Regex.Split(s1, @"\s*,\s*");
if (!lines2.Contains(lines3.ToString()))
{
lines2.AddRange(lines3.Distinct().ToArray());
}
J'ai vérifié tous les espaces, etc, mais je reçois encore des valeurs en double dans mon lines2 List
Je dois enlever mes valeurs en double ici lui-même
source d'informationauteur vini
Vous devez vous connecter pour publier un commentaire.
Votre cette case:
est pas valide. Vous de vérifier si votre
lines2
contientSystem.String[]
depuislines3.ToString()
vous donnera. Vous devez vérifier si l'élément delines3
existe danslines2
ou pas.Vous pouvez parcourir chaque élément dans
lines3
vérifier s'il existe dans lelines2
puis l'ajouter. Quelque chose comme.Ou si votre
lines2
est toute la liste est vide, alors vous pouvez simplement ajouter lelines3
valeurs distinctes de la liste comme:alors votre
lines2
contiendra des valeurs distinctes.Vous pouvez utiliser Énumérable.Sauf pour obtenir des articles distincts de lines3 qui n'est pas dans lines2:
Si lines2 contient tous les éléments de lines3 alors rien ne sera ajouté. BTW, en interne, à l'Exception des utilisations
Set<string>
pour obtenir des articles distincts de la deuxième séquence et de vérifier ces éléments présents dans la première séquence. Donc, c'est plutôt rapide.Utiliser un
HashSet<string>
au lieu d'unList<string>
. Il est prêt à procéder à une meilleure performance parce que vous n'avez pas besoin de fournir des contrôles pour tous les articles. La collection sera gérer pour vous. C'est la différence entre unlist
et unset
. Pour l'échantillon:Total est
5
et les valeurs sonta
b
c
d
e
.La mise en œuvre de l'
List<T>
ne vous donne pas nativelly. Vous pouvez le faire, mais vous devez fournir à ce contrôle. Pour l'échantillon, ceextension method
:et de l'utiliser:
Si vous ne voulez pas de doublons dans une liste, utilisez une
HashSet
. De cette façon, il sera clair pour quelqu'un d'autre lecture de votre code, ce que votre intention était, et vous aurez moins de code à écrire depuisHashSet
déjà les poignées de ce que vous essayez de faire.Vous pouvez utiliser un simple
Union
+Distinct
:Qui va ajouter tous les éléments de la deuxième liste dans la première liste, et puis le retour de toutes les chaînes dans la liste. Pas de chances de bien performer avec de grandes listes, mais c'est simple.
Référence: http://msdn.microsoft.com/en-us/library/bb341731.aspx
Si votre chèque aurait fonctionné, il aurait ajouté tous les éléments, ou rien du tout. Toutefois, l'appel de la
ToString
méthode sur un tableau retourne le nom du type de données, et non pas le contenu de la matrice, et laContains
méthode ne peut regarder pour un seul article, ce n'est pas une collection d'articles de toute façon.Vous devez vérifier chaque chaîne dans le tableau:
Toutefois, si vous commencez avec une liste vide, vous pouvez utiliser le
Distinct
méthode pour supprimer les doublons, et vous avez seulement besoin d'une seule ligne de code:Si vous souhaitez enregistrer les valeurs distinctes dans une collection, vous pourriez essayer La Classe HashSet. Il sera automatiquement supprimer les valeurs en double et enregistrer votre temps de codage. 🙂
utilisation
HashSet
c'est mieuxprendre un coup d'oeil ici : http://www.dotnetperls.com/hashset
Utiliser un
HashSet
avec votreList
:myHashSet.Add(s)
sera de retourtrue
sis
est de ne pas exister en elle.pas une bonne façon mais genre de solution rapide,
prendre un bool pour vérifier si dans la liste il n'y a aucun doublon.