コード例 #1
0
ファイル: Combinatorics.cs プロジェクト: JeroenBos/JBSnorro
            /// <summary> Creates one CombinationWithGaps out of the specified ones. </summary>
            public static CombinationWithGaps <T> Combine(IEnumerable <CombinationWithGaps <T> > combinations)
            {
                Contract.Requires(combinations != null);
                Contract.LazilyRequires(ref combinations, NotNull);
                Contract.Requires(combinations.SelectMany(combi => combi.AllIntervalsIn()).ToSortedList(IntervalExtensions.Compare).AreDisjoint());

                return(new CombinationWithGaps <T>(combinations.SelectMany(combi => combi.Combination).ToReadOnlyList(),
                                                   combinations.SelectMany(combi => combi.Gaps).ToList()));
            }
コード例 #2
0
ファイル: Combinatorics.cs プロジェクト: JeroenBos/JBSnorro
        private static IEnumerable <T[]> AllCombinations <T>(IEnumerable <int> counts, Func <int, int, T> select)
        {
            Contract.Requires(counts != null);
            Contract.LazilyRequires(ref counts, count => count >= 0);
            Contract.Requires(select != null);

            var result = EnumerableExtensions.Range(counts.ToList())
                         .Select(elementIndices => elementIndices.Map(select));

            EnsureSingleEnumerationDEBUG(ref result);
            return(result);
        }