嵌套字典LINQ中的过滤元素
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了嵌套字典LINQ中的过滤元素相关的知识,希望对你有一定的参考价值。
我有以下数据结构:
Dictionary<string, Dictionary<string, List<int>>> data =
new Dictionary<string, Dictionary<string, List<int>>>();
我想根据内部字典列表的第一个元素中的值过滤该字典中的一些元素。
for example:
{legion1
{soldier1, [10,1000]},
{soldier2, [50,1000]}
}
现在让我们说我想做foreach循环,其中只使用列表的第一个元素的值小于20的元素,foreach循环中的预期结果是:
{legion1{soldier1, [10,1000]}}
我尝试过的:
我做foreach循环然后我想使用类似的东西:
data.where(x => x.value.where(o => o[0] < 20 ))
我总是得到错误,这种方式是不正确的。
请告诉我如何解决问题以及我的方式失败的原因。
答案
您可以像这样过滤和迭代结果集:
var resultSet =
data.ToDictionary(e => e.Key,
e => e.Value.Where(x => x.Value[0] < 20)
.ToDictionary(k => k.Key, v => v.Value)
);
foreach(var item in resultSet){
var key = item.Key; // string
var values = item.Value; // Dictionary<string, List<int>>
...
...
}
另一答案
问题是您正在正确应用operator []
。此外,既然你想同时使用Legion
和Soldier
,你应该构造一个组合其中两个元组的元组:
foreach (var t in data.SelectMany(lg => lg.Value.Select(s => new {
Legion = lg
, Soldier = s
})).Where(ls => ls.Soldier.Value[0] < 20)) {
Console.WriteLine("Legion={0} Soldier = {1}", t.Legion.Key, t.Soldier.Key);
}
以上是关于嵌套字典LINQ中的过滤元素的主要内容,如果未能解决你的问题,请参考以下文章