将 List<List<Object>> 映射到具有对象属性最大值的字典
Mapping List<List<Object>> to a Dictionary with maximum value of object properties
我有一个List<List<PersonTypeAccess>>
。 PersonTypeAccess
是一个具有 2 个属性的对象:PersonType
和 AccessType
。这些都是枚举。
如果我尝试将其可视化,列表可能如下所示:
{
{ 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);
我有一个List<List<PersonTypeAccess>>
。 PersonTypeAccess
是一个具有 2 个属性的对象:PersonType
和 AccessType
。这些都是枚举。
如果我尝试将其可视化,列表可能如下所示:
{
{ 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);