简短的问题。有没有办法使用 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;
}
您可以使用
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 方法的性能会较差,因为您无法使用字典的即时查找功能。