将 List<List<Object>> 映射到具有对象属性最大值的字典

Mapping List<List<Object>> to a Dictionary with maximum value of object properties

我有一个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
}

我该怎么做?

您可以使用 SelectMany to flatten the lists. You then use GroupBy to group by PersonType, where in the result selector you use Max on the individual elements (AccessType cast to int) and select an anonymous type containing each PersonType and it's maximum AccessType. Finally you project that to a dictionary using 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);