【发布时间】:2021-08-21 07:28:14
【问题描述】:
我有两个类如下:
public class result
{
public person identity { get; set; }
}
public class person
{
public string name { get; set; }
public string family { get; set; }
}
我有List<result> 有一些重复数据。我想去掉System.Linq.GroupBy的重复数据
我搜索了很多,我认为我找到的最佳答案是here,所以我模拟了我的代码如下:
class Program
{
static void Main(string[] args)
{
person p1 = new person();
p1.name = "Bill"; p1.family = "Gates";
person p2 = new person();
p2.name = "Satoshi"; p2.family = "Nakamoto";
person p3 = new person();
p3.name = "AmirAli"; p3.family = "Sam";
List<result> lst = new List<result>();
List<List<result>> lstGrp = new List<List<result>>();
lst.Add(new result { identity = p1 });
lst.Add(new result { identity = p1 });
lst.Add(new result { identity = p1 });
lst.Add(new result { identity = p2 });
lst.Add(new result { identity = p2 });
lst.Add(new result { identity = p2 });
lst.Add(new result { identity = p3 });
lst.Add(new result { identity = p3 });
lst.Add(new result { identity = p3 });
lstGrp = lst
.GroupBy(r => r.identity)
.Select(grp => grp.ToList())
.ToList();
foreach (List<result> list in lstGrp)
{
foreach (result item in list)
{
Console.WriteLine(item.identity.name + " " + item.identity.family);
}
}
}
}
如图所示,我在不同的结果中有重复的人,但我想在我的控制台中看到每个人一次:
但我最后面对的是:
我应该如何更改我的代码以获得我想要的结果?
非常感谢。
【问题讨论】:
-
person p1 = new person(); p1.name = "Bill"; p1.family = "Gates"; person p2 = new person(); p1.name = "Satoshi"; p1.family = "Nakamoto"; person p3 = new person(); p1.name = "AmirAli"; p1.family = "Sam";是不是打错字了?您只将姓名和家庭设置为 p1 人 -
@demo 真的很抱歉!复制粘贴的坏处!但是我仍然有这个问题,我在另一个项目中做了,但仍然没有工作,所以我模拟了我的项目,如图所示。谢谢。
-
代码中唯一真正的问题是您正在迭代组集合中的每个列表,而您可能只是迭代组集合并显示键。有关解决此问题的正确方法,请参阅副本。也就是说,我会注意到您可能会遇到的下一个问题是,虽然上面的方法可以很好地进行分组,但这只是因为您对每个 @987654331 使用相同的 instance @ 使用相同的
person。 ... -
... 在实际情况下,您可能会有多个使用相同值的
person实例,并且希望实现IEquatable<person>以使分组按预期工作它到。
标签: c# linq linq-group