我试图找出列表中的重复值。
但是,我的列表类型不是原始类型,我想知道列表中的哪些元素是重复的。
例如,我有三个&#34; 人&#34; List<Person>
,人中的课程,如下面的代码。
我的过滤器是&#34; 性别&#34; Person类的属性,目标结果应包含&#34; Mary&#34;和&#34;桑迪&#34;对象,因为他们的性别的价值是相同的 - &gt;女性。
Person Paul = new Person() { Name="Paul", Gender="male", Age="15"};
Person Mary = new Person() { Name = "Mary", Gender = "female", Age = "22" };
Person Sandy = new Person() { Name = "Sandy", Gender = "female", Age = "13" };
List<Person> people = new List<Person>();
people.Add(Paul);
people.Add(Mary);
people.Add(Sandy);
答案 0 :(得分:2)
使用GroupBy
查找&#34;重复项&#34;,然后按计数限制:
var duplicates = people.GroupBy(p => p.Gender)
.Where (g => g.Count() >= 2);
此时您可以枚举:
foreach (Person person in duplicates)
{
Console.WriteLine(person.Name);
}
答案 1 :(得分:1)
您希望分组,而不是查找重复项。您可以使用LINQ GroupBy
方法执行此操作:
people.GroupBy(p => p.Gender)
这将返回IGrouping<string, Person>
,string
作为键组的类型。
类似的方法是使用查找:
var peopleByGender = people.ToLookup(p => p.Gender);
var females = peopleByGender["female"]; // An IEnumerable<Person> containing Mary and Sandy
这会返回ILookup<string, Person>
,就像字典一样,除了可以多次出现相同的密钥。
另一方面,您应该使用enum作为性别。
答案 2 :(得分:0)
people.Where(p => p.Gender.Equals("female").ToList();
应该给你你想要的东西