我有项目清单。在每个项目中,我为作为项目一部分的每个用户计算一些值。所以在退出时我得到这样的东西 -
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对添加到输出列表中。还是有更好的方法?
答案 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);
}