字典到元组列表

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

简短的问题。有没有办法使用 Linq 或任何其他默认解决方案来做到这一点?

两个字典具有相同的键但不同的值到值元组列表。该列表应仅包含值,其中两个字典都有匹配的键。

public static List<Tuple<TOut1, TOut2>> ParseToTupleList<TKey, TOut1, TOut2>(
    IDictionary<TKey, TOut1> a,
    IDictionary<TKey, TOut2> b)
{
    var list = new List<Tuple<TOut1, TOut2>>(a.Count());

    foreach (var keyValue in a)
    {
        if (b.TryGetValue(keyValue.Key, out var bValue))
        {
            list.Add(new Tuple<TOut1, TOut2>(keyValue.Value, bValue));
        }
    }

    return list;
}
c# list linq dictionary tuples
1个回答
2
投票

您可以使用

Where()
代替
if
,使用
Select()
代替
list.Add

return a
    .Where(aEntry => b.ContainsKey(aEntry.Key))
    .Select(aEntry => new Tuple<TOut1, TOut2>(aEntry.Value, b[aEntry.Key]))
    .ToList();

通常,“包含”是一个 O(n) 操作,但对于字典来说,它是 O(1),所以这不会影响性能。您还可以重写此代码以使用

join
代替,通过键将 A 的条目与 B 的条目相匹配。

return (from aEntry in a
        join bEntry in b on aEntry.Key equals bEntry.Key
        select new Tuple<TOut1, TOut2>(aEntry.Value, bEntry.Value)).ToList();

我认为 join 方法的性能会较差,因为您无法使用字典的即时查找功能。

© www.soinside.com 2019 - 2024. All rights reserved.