如何将这个嵌套的foreach转换为linq C#
当我试图将这个嵌套的foreach转换为LINQ时,我无法做到这一点。我试过几种方法,但什么也没试过。我没有得到这些结果如何将这个嵌套的foreach转换为linq C#,c#,performance,linq,lambda,C#,Performance,Linq,Lambda,当我试图将这个嵌套的foreach转换为LINQ时,我无法做到这一点。我试过几种方法,但什么也没试过。我没有得到这些结果 foreach (string field in extractorResults.Keys) { if (fileResults.ContainsKey(field)) { foreach (ExtractionResult exResult in extractorResults[field]) { fileResults[
foreach (string field in extractorResults.Keys) {
if (fileResults.ContainsKey(field)) {
foreach (ExtractionResult exResult in extractorResults[field]) {
fileResults[field].Add(exResult);
}
} else
fileResults.Add(field, extractorResults[field]);
}
}
似乎您正在尝试“合并”两个词典:
fileResults = fileResults.Concat(extractorResults)
.GroupBy(kvp => kvp.Key)
.ToDictionary(g => g.Key, g => g.SelectMany(kvp => kvp.Value).ToList());
说明:
Distinct()
调用。尽管最初基于foreach的逻辑会产生重复的结果逐步(我将使用JSON格式显示数据流): 假设您有两个包含以下数据的字典(这里实际的数据类型无关紧要): 在连接这些字典之后,您将得到单个键值对序列
[
{ key:"a", value: [1,2] },
{ key: "b", value: [5] },
{ key:"c", value: [7] },
{ key: "b", value: [3,4] }
]
接下来是分组:
[
{ key: "a", items: [ { key:"a", value: [1,2] } ] },
{ key: "b", items: [ { key: "b", value: [5] }, { key: "b", value: [3,4] },
{ key: "c", items: [ { key:"c", value: [7] } ]
]
最后,我们为上面的每个组创建新的字典:
[
{ key: "a", value: [1, 2] },
{ key: "b", value: [5, 3, 4] },
{ key: "c", value: [7] }
]
感谢大家的帮助,最后,由于我无法将字典转换为IDictionary,这对我很有用:
var mergeResults = fileResults.Concat(extractorResults)
.GroupBy(kvp => kvp.Key)
.ToDictionary(g => g.Key, g => g.SelectMany(kvp => kvp.Value).ToList())
.Where(kvp => !fileResults.ContainsKey(kvp.Key));
var kvpMergeResults = mergeResults as IList<KeyValuePair<string, List<Result>>> ?? mergeResults.ToList();
fileResults.Add(kvpMergeResults.First().Key, kvpMergeResults.First().Value);
var mergeResults=fileResults.Concat(extractorResults)
.GroupBy(kvp=>kvp.Key)
.ToDictionary(g=>g.Key,g=>g.SelectMany(kvp=>kvp.Value).ToList())
.Where(kvp=>!fileResults.ContainsKey(kvp.Key));
var kvpMergeResults=将结果合并为IList??mergeResults.ToList();
添加(kvpMergeResults.First().Key,kvpMergeResults.First().Value);
您尝试了什么?具体来说,是以什么方式不起作用的?您可以将实际类型的extractorResults、fileResults和。否则,这是不可能回答你的问题的。工作:),但我仍然有麻烦,当我做演员从名单到IList。谢谢你的帮助。
var mergeResults = fileResults.Concat(extractorResults)
.GroupBy(kvp => kvp.Key)
.ToDictionary(g => g.Key, g => g.SelectMany(kvp => kvp.Value).ToList())
.Where(kvp => !fileResults.ContainsKey(kvp.Key));
var kvpMergeResults = mergeResults as IList<KeyValuePair<string, List<Result>>> ?? mergeResults.ToList();
fileResults.Add(kvpMergeResults.First().Key, kvpMergeResults.First().Value);