检查列表中是否没有重复

时间:2011-12-01 11:49:55

标签: c# list contains

我有一个名为com的列表,其中包含一堆整数。我需要检查列表以确保每个整数仅在列表中存在一次。 所以如果:

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

我需要一些代码来检查1代表2和3代表。 这是我对如何解决它的最佳猜测:

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

但它不起作用。有人可以帮帮我吗?

3 个答案:

答案 0 :(得分:6)

这是使用LINQ的简单但可能不那么有效的方式:

using System.Linq;

...

bool containsRepeats = com.Count() != com.Distinct().Count();

答案 1 :(得分:2)

您可以通过将每个项目添加到HashSet<T>来确定集合是否包含重复项。如果项目已存在,HashSet<T>.Add Method将返回false:

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

如果您只想删除集合中的所有重复项,可以使用Enumerable.Distinct Extension Method:

var result = new[] { 1, 2, 3, 4, 1, 3 }.Distinct();
// result == { 1, 2, 3, 4 }

答案 2 :(得分:1)

你可以这样试试..

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);