Combinations
/// <summary> /// Returns all combinations of a chosen amount of selected elements in the sequence. /// </summary> /// <typeparam name = "T">The type of the elements of the input sequence.</typeparam> /// <param name = "source">The source for this extension method.</param> /// <param name = "select">The amount of elements to select for every combination.</param> /// <param name = "repetition">True when repetition of elements is allowed.</param> /// <returns>All combinations of a chosen amount of selected elements in the sequence.</returns> public static IEnumerable<IEnumerable<T>> Combinations<T>( this IEnumerable<T> source, int select, bool repetition = false ) { Contract.Requires( source != null ); Contract.Requires( select >= 0 ); return select == 0 ? new[] { new T[0] } : source.SelectMany( ( element, index ) => source .Skip( repetition ? index : index + 1 ) .Combinations( select - 1, repetition ) .Select( c => new[] { element }.Concat( c ) ) ); }Example:
int[] numbers = new[] { 0, 1 }; var result = numbers.Combinations( 2, true ); // result == {{0, 0}, {0, 1}, {1, 0}, {1, 1}}
Description
Returns all combinations of a chosen amount of selected elements in the sequence.
Details
- Author: Steven Jeuris
- Submitted on: 15-11-2011 09:28:20
- Language: C#
- Type: System.IEnumerable<T>
- Views: 5469
Double click on the code to select all.