Shuxia Ning
2024-07-29 8f15f93b380fac12676487603297e3cc32f377f8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
namespace IStation
{
    static class Expand
    { 
        /// <summary>
       /// 笛卡尔乘积
       /// </summary>
        public static List<List<T>> CartesianProduct<T>(this List<List<T>> lstSplit)
        {
            long count = 1;
            lstSplit.ForEach(item => count *= item.Count);
            //count = lstSplit.Aggregate(1, (result, next) => result * next.Count);
 
            var lstResult = new List<List<T>>();
 
            for (long i = 0; i < count; ++i)
            {
                var lstTemp = new List<T>();
                long j = 1;
                lstSplit.ForEach(item =>
                {
                    j *= item.Count;
                    var index = (i / (count / j)) % item.Count;
                    var index_int = (int)index;
                    lstTemp.Add(item[index_int]);
                });
                lstResult.Add(lstTemp);
            }
            return lstResult;
        }
 
 
    }
}