Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 找出列表中的重复值_C#_List - Fatal编程技术网

C# 找出列表中的重复值

C# 找出列表中的重复值,c#,list,C#,List,我试图找出列表中的重复值 但是,我的列表的类型不是基元类型,我想知道列表中的哪些元素是重复的 例如,我在列表中有三个“人”类,人,如下代码所示 我的过滤器是Person类的“Gender”属性,目标结果应该包含“Mary”和“Sandy”对象,因为它们的性别值是相同的-->女性 personpaul=newperson(){Name=“Paul”,Gender=“male”,Age=“15”}; Person Mary=新人(){Name=“Mary”,Gender=“female”,Age=“

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

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

例如,我在
列表
中有三个“”类,,如下代码所示

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

personpaul=newperson(){Name=“Paul”,Gender=“male”,Age=“15”};
Person Mary=新人(){Name=“Mary”,Gender=“female”,Age=“22”};
Person Sandy=新人(){Name=“Sandy”,Gender=“female”,Age=“13”};
列表人员=新列表();
人物。加上(保罗);
人物。加上(玛丽);
人。加上(桑迪);

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

var duplicates = people.GroupBy(p => p.Gender)
                       .Where (g => g.Count() >= 2);
此时,您可以仅列举:

foreach (Person person in duplicates)
{
   Console.WriteLine(person.Name);
}
看起来您需要分组,而不是查找重复项。可以使用LINQ
GroupBy
方法执行此操作:

people.GroupBy(p => p.Gender)
这将返回一个
i分组
字符串
作为组键类型

类似的方法是使用查找:

var peopleByGender=people.ToLookup(p=>p.Gender);
女性变量=按性别划分的人群[“女性”];//包含玛丽和桑迪的数字表
这将返回一个
ILookup
,与字典类似,只是同一个键可以出现多次

另一方面,您可能应该为性别使用枚举

people.Where(p => p.Gender.Equals("female").ToList();

应该给你想要的

我已经编辑了你的标题。请看“”,其中的共识是“不,他们不应该”。顺便说一句,不要缩进您的纯文本。将代码缩进四个空格,而不是文本这只处理一种情况。“如果他不知道是什么情况,他就无法识别清楚与否。@上将:但对于复杂的对象,你应该知道过滤数据的键。@PankajKapare更大的问题是,这无法检测是否有多个女性。”。这种情况是基于“女性”不止一次出现,而不仅仅是字符串。呃,我不同意这种观点。如果你的用户将他们的位置添加到他们的个人资料中,而你只是想知道你是否通过寻找独特的城市而未充分渗透到某个位置,该怎么办。我知道你在说什么,但它不适合所有情况,至少不适合所有个人。然后测试计数,看看密钥在原始列表中是否有唯一的对。“这就是你的想法,对吗?”上将:是的,我应该说出来,但我还是有点不清楚OP到底要求什么。
var peopleByGender = people.ToLookup(p => p.Gender);
var females = peopleByGender["female"]; // An IEnumerable<Person> containing Mary and Sandy
people.Where(p => p.Gender.Equals("female").ToList();