Comment savoir si le List<string>
a des valeurs en double ou non?
J'ai essayé avec le code ci-dessous. Y a-t-il un meilleur moyen de réaliser?
var lstNames = new List<string> { "A", "B", "A" };
if (lstNames.Distinct().Count() != lstNames.Count())
{
Console.WriteLine("List contains duplicate values.");
}
Essayez d’utiliser GroupBy
et Any
comme;
lstNames.GroupBy(n => n).Any(c => c.Count() > 1);
GroupBy
method;
Regroupe les éléments d'une séquence en fonction d'une clé spécifiée fonction de sélection et projette les éléments de chaque groupe en utilisant un fonction spécifiée.
Any
méthode, il retourne boolean
;
Détermine si un élément d'une séquence existe ou satisfait un état.
Si vous cherchez le moyen le plus efficace de le faire,
var lstNames = new List<string> { "A", "B", "A" };
var hashset = new HashSet<string>();
foreach(var name in lstNames)
{
if (!hashset.Add(name))
{
Console.WriteLine("List contains duplicate values.");
break;
}
}
s'arrêtera dès qu'il trouvera le premier duplicata . Vous pouvez l'intégrer dans une méthode (ou une méthode d'extension) si vous l'utilisez à plusieurs endroits.
Une version d'extension généralisée et compacte de la réponse basée sur la technique de hachage:
public static bool AreAnyDuplicates<T>(this IEnumerable<T> list)
{
var hashset = new HashSet<T>();
return list.Any(e => !hashset.Add(e));
}
var duplicateExists = lstNames.GroupBy(n => n).Any(g => g.Count() > 1);
class Program
{
static void Main(string[] args)
{
var listFruits = new List<string> { "Apple", "Banana", "Apple", "Mango" };
if (FindDuplicates(listFruits)) { WriteLine($"Yes we find duplicate"); };
ReadLine();
}
public static bool FindDuplicates(List<string> array)
{
var dict = new Dictionary<string, int>();
foreach (var value in array)
{
if (dict.ContainsKey(value))
dict[value]++;
else
dict[value] = 1;
}
foreach (var pair in dict)
{
if (pair.Value > 1)
return true;
else
return false;
}
return false;
}
}