在C#列表中查找重复项的计数

我在C#中使用List。 代码如下所述:

TestCase.cs

public class TestCase { private string scenarioID; private string error; public string ScenarioID { get { return this.scenarioID; } set { this.scenarioID = value; } } public string Error { get { return this.error; } set { this.error = value; } } public TestCase(string arg_scenarioName, string arg_error) { this.ScenarioID = arg_scenarioName; this.Error = arg_error; } } 

我创建的列表是:

 private List GetTestCases() { List scenarios = new List(); TestCase scenario1 = new TestCase("Scenario1", string.Empty); TestCase scenario2 = new TestCase("Scenario2", string.Empty); TestCase scenario3 = new TestCase("Scenario1", string.Empty); TestCase scenario4 = new TestCase("Scenario4", string.Empty); TestCase scenario5 = new TestCase("Scenario1", string.Empty); TestCase scenario6 = new TestCase("Scenario6", string.Empty); TestCase scenario7 = new TestCase("Scenario7", string.Empty); scenarios.Add(scenario1); scenarios.Add(scenario2); scenarios.Add(scenario3); scenarios.Add(scenario4); scenarios.Add(scenario5); scenarios.Add(scenario6); scenarios.Add(scenario7); return scenarios; } 

现在我正在遍历列表。 我想找到具有相同ScenarioID的列表中有多少重复的测试用例。 有没有办法使用Linq或List的任何内置方法来解决它?

此致,Priyank

试试这个:

 var numberOfTestcasesWithDuplicates = scenarios.GroupBy(x => x.ScenarioID).Count(x => x.Count() > 1); 

作为第一个想法:

 int dupes = list.Count() - list.Distinct(aTestCaseComparer).Count(); 

要获得重复计数

 int duplicateCount = scenarios.GroupBy(x => x.ScenarioID) .Sum(g => g.Count()-1); 
 var groups = scenarios.GroupBy(test => test.ScenarioID) .Where(group => group.Skip(1).Any()); 

这将为每个具有多个项目的ScenarioID提供一个组。 组的计数是重复组的数量,内部每个组的计数是该单个项目的重复数。

另外请注意, .Skip(1).Any() .Count()在那里,因为Where子句中的.Count()需要迭代每一个项目才发现有多个项目。

也许这样的事情

 var result= GetTestCases() .GroupBy (x =>x.ScenarioID) .Select (x =>new{x.Key,nbrof=x.Count ()} ); 

要获得重复的总数,还有另一个:

 var set = new HashSet(); var result = scenarios.Count(x => !set.Add(x.ScenarioID)); 

要获得不同的重复项:

 var result = scenarios.GroupBy(x => x.ScenarioID).Count(x => x.Skip(1).Any());