ScanExtension.Scan<TSource>(IEnumerable<TSource>, Func<TSource, TSource, TSource>) Method

Performs a scan (inclusive prefix sum) on a sequence of elements.

Definition

Namespace: MoreLinq.Extensions
Assembly: MoreLinq (in MoreLinq.dll) Version: 4.0.0+092a40d82a1b280568ffa006d9a210bdec0792cd
C#
public static IEnumerable<TSource> Scan<TSource>(
	this IEnumerable<TSource> source,
	Func<TSource, TSource, TSource> transformation
)

Parameters

source  IEnumerable<TSource>
Source sequence
transformation  Func<TSource, TSource, TSource>
Transformation operation

Type Parameters

TSource
Type of elements in source sequence

Return Value

IEnumerable<TSource>
The scanned sequence

Usage Note

In Visual Basic and C#, you can call this method as an instance method on any object of type IEnumerable<TSource>. When you use instance method syntax to call this method, omit the first parameter. For more information, see Extension Methods (Visual Basic) or Extension Methods (C# Programming Guide).

Remarks

An inclusive prefix sum returns an equal-length sequence where the N-th element is the sum of the first N input elements. More generally, the scan allows any commutative binary operation, not just a sum. The exclusive version of Scan is PreScan<TSource>(IEnumerable<TSource>, Func<TSource, TSource, TSource>, TSource). This operator uses deferred execution and streams its result.

Example

C#
int[] values = { 1, 2, 3, 4 };
var prescan = values.PreScan((a, b) => a + b, 0);
var scan = values.Scan((a, b) => a + b);
var result = values.EquiZip(scan, ValueTuple.Create);
prescan will yield { 0, 1, 3, 6 }, while scan and result will both yield { 1, 3, 6, 10 }. This shows the relationship between the inclusive and exclusive prefix sum.

See Also