LINQ에서 Where
은 스트리밍 운영자입니다. Where-as OrderByDescending
은 비 스트리밍 연산자입니다. AFAIK, 스트리밍 운영자는 필요한 다음 항목 만 수집합니다. 비 스트리밍 연산자는 전체 데이터 스트림을 한 번에 평가합니다.스트리밍 운영자는 지연된 실행과 어떻게 다릅니 까?
나는 스트리밍 운영자를 정의하는 것과 관련이 없다. 나에게 그것은 Deferred Execution과 중복된다. 내가 custom 익스텐션을 작성하고 where 연산자와 orderby를 사용하여 그것을 소비 한 예제를 보자. 어느 경우
public static class ExtensionStuff
{
public static IEnumerable<int> Where(this IEnumerable<int> sequence, Func<int, bool> predicate)
{
foreach (int i in sequence)
{
if (predicate(i))
{
yield return i;
}
}
}
}
public static void Main()
{
TestLinq3();
}
private static void TestLinq3()
{
int[] items = { 1, 2, 3,4 };
var selected = items.Where(i => i < 3)
.OrderByDescending(i => i);
Write(selected);
}
private static void Write(IEnumerable<int> selected)
{
foreach(var i in selected)
Console.WriteLine(i);
}
는
Where
조건을 만족하는 요소를 결정하기 위해 각 요소를 평가할 필요가있다. 오퍼레이터가 지연된 실행을 얻으므로 그 결과가 관련성이있는 것처럼 보입니다.
따라서 스트리밍 연산자의 중요성은 무엇입니까?
'항목'에 약 20 억 개의 정수를 사용하여 다시 시도해보십시오. – cHao
@cHao 또는 무한 시퀀스 또는 열린 네트워크 스트림에서 파생 된 시퀀스 –
[더 구체적인 예] (http://codereview.stackexchange.com/a/9777/8246) –