计算多个集合的组合排列个数

来源:互联网 发布:淘宝我的提问在哪里看 编辑:程序博客网 时间:2024/05/23 11:56

 private static List<T[]> GetCombination<T>(List<T[]> param)
        {
            if (param == null) { return null; }
            int Count = param.Select(f => f.Length).Aggregate((a, b) => a * b);//表示所有集合元素所有组合总数

            List<T[]> resArr = new List<T[]>();

            for (int i = 0; i < Count; i++)
            {
                T[] pp = new T[param.Count];
                for (int j = 0; j < param.Count; j++)
                {
                    T[] mm = param[j];
                    pp[j] = mm[(i * CalcIndex(param, j) / Count) % mm.Length];
                }
                resArr.Add(pp);
            }
            return resArr;
        }

        private static int CalcIndex<T>(List<T[]> dList, int index)
        {
            int n = 1;
            for (int i = 0; i < dList.Count; i++)
            {
                if (i <= index)
                {
                    n = n * dList[i].Length;
                }
                else
                {
                    break;
                }
            }
            return n;
        }