C# 用C重新格式化输出值#

C# 用C重新格式化输出值#,c#,.net,linq,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 - v

我有一份项目清单。在每个项目中,我为项目中的每个用户计算一些值。所以在出口处我得到了这样的东西-

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
我需要一些如何实现它的想法或例子


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

您可以使用
查找
,它允许重复键,因为值始终是
IEnumerable
,因此即使是不可用的键也会返回

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

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

对用户使用分组方式@A.T.如果我有这样简单的逻辑,我可以在用户上使用groub by,这样我就可以很容易地访问用户。但这不是我的情况。在项目列表的循环中,我调用API方法来获取用户。。。所以对我来说,这不是答案,不是答案,这是评论,无论如何,你应该在问题中起草如此复杂的内容,这样我们才能更好地回答。
IEnumerable<Project> userProjects = userLookup["User1"]; // presuming it's a string
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);
}