将List<List<Object>>映射到一个对象属性最大值的字典中。

问题描述 投票:0回答:1

我有一个 List<List<PersonTypeAccess>>. PersonTypeAccess 是一个具有2个属性的对象。PersonTypeAccessType. 这些都是一个枚举。

如果我试着把它可视化,这些列表可能是这样的。

{
{ PersonType = 0, AccessType = 2},
{ PersonType = 5, AccessType = 0},
{ PersonType = 2, AccessType = 1}
},
{
{ PersonType = 6, AccessType = 1},
{ PersonType = 3, AccessType = 0}
},
{
{ PersonType = 3, AccessType = 1},
{ PersonType = 5, AccessType = 0},
{ PersonType = 8, AccessType = -1},
{ PersonType = 0, AccessType = 1}
}

我需要创建一个 Dictionary<PersonType, AccessType> 每一个PersonType只有一次,加上它在整个列表中找到的最高AccessType值。

对于我上面的例子,这将是。

{
PersonType 0 -> AccessType 2,
PersonType 8 -> AccessType -1,
PersonType 5 -> AccessType 0,
PersonType 3 -> AccessType 1,
PersonType 6 -> AccessType 1,
PersonType 2 -> AccessType 1
}

我应该怎么做?

c# dictionary mapping ienumerable
1个回答
0
投票

你可以使用 SelectMany 来压平列表。然后使用 GroupBy 归类 PersonType,在结果选择器中使用 Max 在单个元素上(AccessType 投向 int),并选择一个匿名类型,包含每个 PersonType 和它的最大 AccessType. 最后,你的项目 到字典中使用 ToDictionary.

var dict = list
     .SelectMany(c => c)
     .GroupBy(
        c => c.PersonType, 
        c => (int) c.AccessType,
        (key, els) => new { 
           PersonType = key, 
           AccessType = (AccessType)els.Max()
        })
     .ToDictionary(c => c.PersonType, c => c.AcessType);
© www.soinside.com 2019 - 2024. All rights reserved.