【发布时间】:2018-04-18 06:34:23
【问题描述】:
我正在尝试做一些非常简单的事情,但由于某种原因,我无法有效地做到这一点并且看起来不错。
我有一个 Persons 集合,我需要用逗号分隔拥有相同电子邮件地址的人的姓名。
我尝试使用Aggregate 函数,但它为所有电子邮件返回一个字符串。我可以在 foreach 循环中执行此操作,但这似乎不是最好的方法。
有人可以告诉我实现这个的好方法吗?
这是数据:
var persons = new List<Person>
{
new Person
{
Email = "A@gmail.com",
Name = "Mori"
},
new Person
{
Email = "A@gmail.com",
Name = "Tori"
},
new Person
{
Email = "A@gmail.com",
Name = "Jake"
},
new Person
{
Email = "A@gmail.com",
Name = "Jove"
},
new Person
{
Email = "B@gmail.com",
Name = "John"
},
new Person
{
Email = "B@gmail.com",
Name = "James"
}
};
预期结果:
返回列表:
- 电子邮件(属性):A@gmail.com 名称(属性):Mori,Tori,Jake,Jove。
- 电子邮件(属性):B@gmail.com 名称(属性):John,James。
【问题讨论】:
-
可以这么简单
persons.GroupBy(e => e.Email).Select(g => $"{g.Key}. Name: {string.Join(",",g.Select(e => e.Name)}") -
根据电子邮件对列表进行排序。然后遍历列表以跟踪上一封电子邮件。如果当前电子邮件与上一个电子邮件匹配,则在名称列表中附加一个逗号,然后是当前名称。如果没有,您就完成了上一封电子邮件。
-
@KingKing:你为什么不发布与答案相同的内容?
-
@KingKing 我认为你没有正确理解我。你返回了一个字符串。我的意思是应该返回一个 List
,其中电子邮件保持不变并且名称用逗号聚合。 -
@un-lucky 我认为这很简单,如果有人有相同的答案并想添加它,请继续。
标签: c#