在C#中重新格式化输出值

时间:2015-09-22 08:26:07

标签: c# .net linq

我有项目清单。在每个项目中,我为作为项目一部分的每个用户计算一些值。所以在退出时我得到这样的东西 -

Project1
user1 - value1
user2 - value2

Project2
user1 - value3
user3 - value4

...

Project10
user8 - value5
user9 - value6

我想以下一种形式转换它:

User1
Project1 - value1
Project2 - value3

User2
Project1 - value2

...

User9
Project10 - value6

我需要一些想法或示例如何实现它。

对我来说,似乎我需要创建一些集合,其中键可以是非唯一的(键 - 它可以是用户名和值 - 用户的值)。所以我可以浏览项目列表,将keyValue对添加到输出列表中。还是有更好的方法?

1 个答案:

答案 0 :(得分:0)

您可以使用允许重复键的Lookup<Tkey,TValue>,因为该值始终为IEnumerable<TValue>,因此即使是不可用的键也会返回https://github.com/tbroyer/gwt-maven-archetypes

var userLookup = projectList.ToLookup(p => p.User);

现在,您可以通过以下方式查找特定用户:

IEnumerable<Project> userProjects = userLookup["User1"]; // presuming it's a string

另一种选择是使用GroupBy

var userGroups = projectList
    .GroupBy(p => p.User)
    .OrderBy(g => g.Key);


foreach(var grp in userGroups)
{
    Console.WriteLine(grp.Key); // user
    foreach(Project p in grp)
        Console.WriteLine("{0} - {1}", p.Name, p.Value);
}