比较使用LINQ查询用C#两个字典键

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

你如何使用LINQ查询比较两个字典键?下面是我目前正在使用我的程序代码:

foreach (KeyValuePair<string, string> sourceProject in sourceProjects)
{
    foreach (KeyValuePair<string, string> targetProject in targetProjects)
    {
        if (targetProject.Key == sourceProject.Key)
        {
            // do something
        }
    }
}
c# .net
2个回答
2
投票

我想,你希望是这样的:

from kv1 in sourceProjects
join kv2 in targetProjects on kv1.Key equals kv2.Key
select /* whatever, e. g. */ kv1.Value + kv2.Value

但实际上,更高效的将是这样:

from key in sourceProjects.Keys.Intersect(targetProjects.Keys)
select /* whatever, e. g. */ sourceProjects[key] + targetProjects[key]

或者可能

from key in sourceProjects.Keys.Intersect(targetProjects.Keys)
let sourceProject = sourceProjects[key]
let targetProject = targetProjects[key]
select /* whatever, e. g. */ sourceProject + targetProject;

0
投票
    IEnumerable<KeyValuePair<string, string>> one;
    IEnumerable<KeyValuePair<string, string>> two;

    var duplicates = one.Select(o => o.Key).Where(k => two.Select(t => t.Key).Any(kTwo => kTwo == k));
    foreach (var duplicateKey in duplicates)
    {
        // Do whatewer you want with those keys here
    }
© www.soinside.com 2019 - 2024. All rights reserved.