有谁知道 LINQ 使用其 Join 运算符执行什么 Join 算法。
是嵌套循环、合并还是哈希集?如果支持的话,有什么方法可以指定不同的吗?
问候
阿尔伯特
首先,它有效地从“内部”序列创建查找,然后迭代外部序列。然后,它可以从外部序列中查找每个密钥并生成每个适当的对。像这样的东西(忽略参数验证等):
public static IEnumerable<TResult> Join<TOuter, TInner, TKey, TResult>
(this IEnumerable<TOuter> outer,
IEnumerable<TInner> inner,
Func<TOuter, TKey> outerKeySelector,
Func<TInner, TKey> innerKeySelector,
Func<TOuter, TInner, TResult> resultSelector)
{
Lookup<TKey, TInner> lookup = inner.ToLookup(innerKeySelector);
foreach (TOuter outerItem in outer)
{
TKey key = outerKeySelector(outerItem);
foreach (TInner innerItem in lookup[key])
{
yield return resultSelector(outerItem, innerItem);
}
}
}
查找将在内部使用哈希表作为键,以便查找任何单个键都非常高效。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)