Проверьте, нет ли повторов в списке - PullRequest
3 голосов
/ 01 декабря 2011

У меня есть список с именем com, который содержит кучу целых чисел.Мне нужно проверить список, чтобы убедиться, что каждое целое число существует только один раз в списке.Поэтому, если:

com{1,2,3,4,1,3}

мне нужен код для проверки того, что 1 представлено в два раза больше, чем 3. Это мое лучшее предположение о том, как его решить:

for (int j = 0; j < com.Count; j++)
        {
            if (com.Contains(com[j]))
            {
                lion += 1;
            }
            else
            {
                lion = 0;
            }   
        }

это не работаетКто-нибудь может мне помочь ??

Ответы [ 3 ]

6 голосов
/ 01 декабря 2011

Вот простой, но, вероятно, не очень эффективный способ использования LINQ:

using System.Linq;

...

bool containsRepeats = com.Count() != com.Distinct().Count();
2 голосов
/ 01 декабря 2011

Чтобы определить, содержит ли коллекция дубликат, добавьте каждый элемент в HashSet . Метод HashSet .Add возвращает false, если элемент уже присутствует:

public static bool HasDuplicate<T>(this IEnumerable<T> source)
{
    var h = new HashSet<int>();
    return source.Any(x => !h.Add(x));
}

Если вы просто хотите удалить все дубликаты из коллекции, вы можете использовать метод расширения Enumerable.Distinct:

var result = new[] { 1, 2, 3, 4, 1, 3 }.Distinct();
// result == { 1, 2, 3, 4 }
1 голос
/ 01 декабря 2011

Вы можете попробовать вот так ..

int[] listOfItems = new[] { 4, 2, 3, 1, 6, 4, 3 };
var duplicates = listOfItems
    .GroupBy(i => i)
    .Where(g => g.Count() > 1)
    .Select(g => g.Key);
foreach (var d in duplicates)
    Console.WriteLine(d);
...