6
LINQがJoin演算子で実行する結合アルゴリズムは誰にも分かりません。LINQ結合演算子は、ネストループ、マージ、またはHashSet結合を使用していますか?
NestedLoop、Merge、またはHashSetですか?サポートされていれば、別の方法を指定する方法はありますか?
よろしく アルバート
LINQがJoin演算子で実行する結合アルゴリズムは誰にも分かりません。LINQ結合演算子は、ネストループ、マージ、またはHashSet結合を使用していますか?
NestedLoop、Merge、またはHashSetですか?サポートされていれば、別の方法を指定する方法はありますか?
よろしく アルバート
まずそれが効果的に外側の列を反復処理、その後、「内側」シーケンスからのルックアップを作成します。次に、外部シーケンスから各キーを検索し、それぞれの適切なペアを生成することができます。
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);
}
}
}
それは個々のキーをルックアップするために効率的だように、ルックアップは、キーの内部ハッシュテーブルを使用します。この(引数の検証を無視するなど)のようなもの。
プロバイダによって異なります。 –
私はLinq To Objects – aattia