找出列表中的重复值

时间:2015-01-14 23:46:55

标签: c# list

我试图找出列表中的重复值。

但是,我的列表类型不是原始类型,我想知道列表中的哪些元素是重复的。

例如,我有三个&#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);   

3 个答案:

答案 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();

应该给你你想要的东西