我在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<TestCase> GetTestCases()
{
List<TestCase> scenarios = new List<TestCase>();
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
答案 0 :(得分:18)
试试这个:
var numberOfTestcasesWithDuplicates =
scenarios.GroupBy(x => x.ScenarioID).Count(x => x.Count() > 1);
答案 1 :(得分:8)
作为第一个想法:
int dupes = list.Count() - list.Distinct(aTestCaseComparer).Count();
答案 2 :(得分:4)
var groups = scenarios.GroupBy(test => test.ScenarioID)
.Where(group => group.Skip(1).Any());
这将为每个具有多个项目的ScenarioID提供一个组。组的数量是重复组的数量,内部每个组的计数是该单个项目的重复数量。
另外请注意,.Skip(1).Any()
存在,因为.Count()
子句中的Where
需要迭代每个项目,只是为了找出不止一个。
答案 3 :(得分:4)
要获得重复计数:
int duplicateCount = scenarios.GroupBy(x => x.ScenarioID)
.Sum(g => g.Count()-1);
答案 4 :(得分:2)
这样的事可能
var result= GetTestCases()
.GroupBy (x =>x.ScenarioID)
.Select (x =>new{x.Key,nbrof=x.Count ()} );
答案 5 :(得分:1)
要获得重复的总数,还有另一个:
var set = new HashSet<string>();
var result = scenarios.Count(x => !set.Add(x.ScenarioID));
获得不同的重复项:
var result = scenarios.GroupBy(x => x.ScenarioID).Count(x => x.Skip(1).Any());