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

本文关键字:格式化 输出 | 更新日期: 2023-09-27 18:14:06

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

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对输出列表。或者有更好的方法?

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

您可以使用允许重复键的Lookup<Tkey,TValue>,因为该值始终是IEnumerable<TValue>,因此即使是不可用的键也返回Enumerable<TValue>.Empty()

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);
}