【问题标题】:Find out the duplicate values in the List [duplicate]找出列表中的重复值 [重复]
【发布时间】:2015-01-14 23:46:55
【问题描述】:

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

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

比如我在List<Person>中有三个“Person”类,people,如下代码。

我的过滤器是 Person 类的“Gender”属性,目标结果应该包含“Mary”和“Sandy”对象,因为它们的 Gender 值相同-->female。

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);   

【问题讨论】:

  • 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
  • 顺便说一句,不要缩进你的纯文本。将您的 代码 缩进四个空格,而不是您的文本

标签: c# list


【解决方案1】:

使用GroupBy 查找“重复项”,然后按计数限制:

var duplicates = people.GroupBy(p => p.Gender)
                       .Where (g => g.Count() >= 2);

此时你可以枚举:

foreach (Person person in duplicates)
{
   Console.WriteLine(person.Name);
}

【讨论】:

    【解决方案2】:

    看起来您想要分组,而不是查找重复项。您可以使用 LINQ GroupBy 方法来做到这一点:

    people.GroupBy(p => p.Gender)
    

    这将返回一个IGrouping&lt;string, Person&gt;string 是组key 类型。

    类似的方法是使用查找

    var peopleByGender = people.ToLookup(p => p.Gender);
    var females = peopleByGender["female"]; // An IEnumerable<Person> containing Mary and Sandy
    

    这会返回一个ILookup&lt;string, Person&gt;,它就像一个字典,只是同一个键可以出现多次。

    顺便说一句,您可能应该使用枚举来表示性别。

    【讨论】:

    • 然后测试count看看key在原始列表中是否有唯一对。你是这么想的吗?
    • @AdmiralAdama 是的,我应该这么说,但我仍然不清楚 OP 到底要求什么。
    【解决方案3】:
    people.Where(p => p.Gender.Equals("female").ToList();
    

    应该给你你想要的

    【讨论】:

    • 这只处理一种情况。如果他不知道是什么情况,他就无法识别出区别。
    • @Admiral :但是对于复杂对象,您应该知道过滤数据的键。
    • @PankajKapare 更大的问题是,这并不能检测是否有超过一名女性。该条件基于多次出现的“女性”,而不仅仅是字符串。
    • 嗯,我不同意这种观点。如果您的用户正在将他们的位置添加到他们的个人资料中,而您只是想通过寻找独特的城市来了解您是否未充分渗透到某个位置,该怎么办。我知道你在说什么,但它不能适合所有情况,尤其是个人。
    猜你喜欢
    • 2015-09-09
    • 1970-01-01
    • 2012-11-15
    • 1970-01-01
    • 2013-02-21
    • 1970-01-01
    • 2020-09-10
    • 2014-09-05
    • 2017-10-15
    相关资源
    最近更新 更多