如何找出一个列表中是否有任何重复项?

时间:2009-10-20 05:04:50

标签: c# list duplicates

我有一个List,其中MyClass有一个属性'Name'。我想知道列表中是否有重复的MyClass具有相同的名称。

此外,我有一个不同的列表,我想知道与列表A相比是否有任何重复。

2 个答案:

答案 0 :(得分:6)

回答第一个问题

  

我想知道是否有重复   MyClass中的名称相同   列表。

你可以这样做:

bool hasDuplicates = 
  listA.Count != listA.Select(c => c.Name).Distinct().Count();

回答第二个问题

  

另外,我有一个不同的List和我   想知道是否有   与列表A相比重复。

你可以这样做:

bool hasDuplicates = 
  differentList.Select(c => c.Name).Intersect(listA.Select(c => c.Name)).Any();

答案 1 :(得分:2)

要检查一个List<MyClass> list中的重复名称:

var names = new HashSet<String>();
foreach (MyClass t in list)
    if(!names.Add(t.Name))
        return "Duplicate name!"
return "No duplicates!"

或变体取决于有/不重复时您想要做什么。对于两个单独列表的情况,只需从一个列表中构建names集合,然后在另一个列表上进行此类检查循环(详细信息取决于仅在第一个列表中的重复名称应该发生的情况,在第二个列表,或者只在一个列表和另一个列表之间,当每个列表都是重复时 - 单独考虑 - 你的规格太不精确,不能让我猜测你想要或期望的多种可能的组合!