105 votes

Tester si toutes les valeurs d'une liste sont uniques

J'ai une petite liste d'octets et je veux tester qu'ils ont tous des valeurs différentes. Par exemple, j'ai ceci :

List<byte> theList = new List<byte> { 1,4,3,6,1 };

Quelle est la meilleure façon de vérifier si toutes les valeurs sont distinctes ou non ?

1voto

Namik Hajiyev Points 11

Je vérifie si un IEnumerable (tableau, liste, etc ) est unique comme ceci :

var isUnique = someObjectsEnum.GroupBy(o => o.SomeProperty).Max(g => g.Count()) == 1;

0voto

Orel Eraki Points 2597

Il existe de nombreuses solutions.

Et sans doute d'autres plus belles avec l'utilisation de LINQ comme "juergen d" et "Tim Schmelter" l'ont mentionné.

Mais si vous privilégiez la complexité et la rapidité, la meilleure solution sera de la mettre en œuvre vous-même. Une des solutions sera de créer un tableau de taille N (256 pour les octets). Et de boucler le tableau, et à chaque itération, de tester l'index du numéro correspondant si la valeur est 1 ; si c'est le cas, cela signifie que j'ai déjà incrémenté l'index du tableau et donc que le tableau n'est pas distinct ; sinon, je vais incrémenter la cellule du tableau et continuer à vérifier.

0voto

Kevin Struillou Points 696

Et une autre solution, si vous voulez trouver des valeurs dupliquées.

var values = new [] { 9, 7, 2, 6, 7, 3, 8, 2 };

var sorted = values.ToList();
sorted.Sort();
for (var index = 1; index < sorted.Count; index++)
{
    var previous = sorted[index - 1];
    var current = sorted[index];
    if (current == previous)
        Console.WriteLine(string.Format("duplicated value: {0}", current));
}

Sortie :

duplicated value: 2
duplicated value: 7

http://rextester.com/SIDG48202

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X