J'ai travaillé avec un string[]
tableau en C # qui est renvoyé par un appel de fonction. Je pourrais éventuellement caster dans une Generic
collection, mais je me demandais s'il y avait une meilleure façon de le faire, éventuellement en utilisant un tableau temporaire.
Quelle est la meilleure façon de supprimer les doublons d'un tableau C #?
c#
arrays
duplicates
lomaxx
la source
la source
Réponses:
Vous pouvez éventuellement utiliser une requête LINQ pour ce faire:
la source
.Distinct(StringComparer.OrdinalIgnoreCase)
pour obtenir un ensemble de chaînes distinct insensible à la casse.The Distinct() method returns an unordered sequence that contains no duplicate values.
Voici l' approche HashSet <string> :
Malheureusement, cette solution nécessite également .NET Framework 3.5 ou version ultérieure, car HashSet n'a pas été ajouté avant cette version. Vous pouvez également utiliser array.Distinct () , qui est une fonctionnalité de LINQ.
la source
Le code testé et fonctionnel suivant supprimera les doublons d'un tableau. Vous devez inclure l'espace de noms System.Collections.
Vous pouvez envelopper cela dans une fonction si vous le souhaitez.
la source
Si vous aviez besoin de le trier, vous pouvez implémenter un tri qui supprime également les doublons.
Tue deux oiseaux avec une pierre, alors.
la source
Cela peut dépendre de la quantité d'ingénierie que vous souhaitez concevoir - si le tableau ne sera jamais aussi grand et que vous ne vous souciez pas de trier la liste, vous voudrez peut-être essayer quelque chose de similaire à ce qui suit:
la source
- C'est une question d'entrevue posée à chaque fois. Maintenant, j'ai fait son codage.
la source
Il s'agit de O (n ^ 2) , qui n'aura pas d'importance pour une courte liste qui sera insérée dans un combo, mais qui pourrait rapidement devenir un problème sur une grande collection.
la source
la source
Voici une approche O (n * n) qui utilise l' espace O (1) .
Les approches de hachage / linq ci-dessus sont celles que vous utiliseriez généralement dans la vie réelle. Cependant, dans les entretiens, ils veulent généralement mettre certaines contraintes, par exemple un espace constant qui exclut le hachage ou pas d' api interne - qui exclut l'utilisation de LINQ .
la source
strIn[j] == strIn[i]
) comparera une chaîne à elle-même, sauf si elle est prise en compte avec une instruction if.Ajoutez toutes les chaînes à un dictionnaire et obtenez ensuite la propriété Keys. Cela produira chaque chaîne unique, mais pas nécessairement dans le même ordre que votre entrée d'origine les avait.
Si vous souhaitez que le résultat final ait le même ordre que l'entrée d'origine, lorsque vous considérez la première occurrence de chaque chaîne, utilisez plutôt l'algorithme suivant:
À la fin, la liste contient la première occurrence de chaque chaîne unique.
Assurez-vous de prendre en compte des choses comme la culture et autres lors de la construction de votre dictionnaire, pour vous assurer de gérer correctement les doublons avec des lettres accentuées.
la source
Le morceau de code suivant tente de supprimer les doublons d'une liste de tableaux bien que ce ne soit pas une solution optimale. On m'a posé cette question lors d'une interview pour supprimer les doublons par récursivité, et sans utiliser un second / temp arraylist:
la source
Solution simple:
la source
Peut-être un hachage qui ne stocke pas les éléments en double et ignore silencieusement les demandes d'ajout de doublons.
la source
REMARQUE: NON testé!
Pourrait faire ce dont vous avez besoin ...
EDIT Argh !!! battu par vol de moins d'une minute!
la source
Testé ci-dessous et cela fonctionne. Ce qui est cool, c'est qu'il fait aussi une recherche sensible à la culture
}
--AptSenSDET
la source
Ce code supprime à 100% les valeurs en double d'un tableau [comme j'ai utilisé un [i]] ..... Vous pouvez le convertir dans n'importe quel langage OO ..... :)
la source
Méthode d'extension générique:
la source
vous pouvez utiliser ce code lorsque vous travaillez avec une liste de tableaux
la source
la source
Vous trouverez ci-dessous une logique simple en java: vous parcourez deux fois les éléments du tableau et si vous voyez un même élément, vous lui attribuez zéro et vous ne touchez pas l'index de l'élément que vous comparez.
la source
la source
la source
Kkk Je ne sais pas si c'est de la sorcellerie ou tout simplement du beau code
1 strINvalues .Split (','). Distinct (). ToArray ()
2 string.Join (",", XXX);
1 Fractionnement de la baie et utilisation de Distinct [LINQ] pour supprimer les doublons. 2 Rebranchez-la sans les doublons.
Désolé je n'ai jamais lu le texte sur StackOverFlow juste le code. cela a plus de sens que le texte;)
la source
la source
Le meilleur moyen? Difficile à dire, l'approche HashSet semble rapide, mais (selon les données) l'utilisation d'un algorithme de tri (CountSort?) Peut être beaucoup plus rapide.
Presque sans branche. Comment? Mode de débogage, Step Into (F11) avec un petit tableau: {1,3,1,1,0}
Une solution avec deux boucles imbriquées peut prendre un certain temps, en particulier pour les baies plus grandes.
la source