读书人

怎么使用C# 笛卡尔乘积达到这种效果

发布时间: 2012-04-03 12:38:19 作者: rapoo

如何使用C# 笛卡尔乘积达到这种效果
笛卡尔乘积地址:http://blog.sina.com.cn/s/blog_53e74b270100oaim.html

调用:

C# code
            List<string> allResult = new List<string>();            string[] a = new string[] { "1", "2", "3" };            string[] b = new string[] { "4"};            string[] c = new string[] { "8", "9" };            List<string[]> All = new List<string[]>();            All.Add(a);            All.Add(b);            All.Add(c);            Descartes(All, 0, allResult, string.Empty, "&");            foreach (var item in allResult)            {                Response.Write(item + "<br />");            }


方法:
C# code
private static string Descartes(List<string[]> ListArr, int Count, List<string> Result, string SourceData, string MergeChar)        {            string strTemp = SourceData;            //获取当前数组            string[] strArr = ListArr[Count];            //循环当前数组            foreach (var item in strArr)            {                if (Count + 1 < ListArr.Count)                    strTemp += Descartes(ListArr, Count + 1, Result, item + MergeChar + SourceData, MergeChar);                    Result.Add(SourceData + item);            }            return strTemp;        }


现在输入的结果是:
HTML code
4&1&84&1&91&414&2&84&2&92&424&3&84&3&93&43



我希望的结果:(怎么修改可以达到这效查)

HTML code
1234891&41&81&92&42&82&93&43&83&91&4&81&4&92&4&82&4&93&4&83&4&94&84&9

像这样,每个值都遍历到一次

[解决办法]
C# code
        private static string Descartes(List<string[]> ListArr, int Count, List<string> Result, string SourceData, string MergeChar)        {            if (SourceData == "1")            {                Console.WriteLine("");            }            //获取当前数组            string[] strArr = ListArr[Count];            //循环当前数组            for (int i = Count; i < ListArr.Count; i++)            {                string[] tempStrArr = ListArr[i];                foreach (string tempStr in tempStrArr)                {                    string strTemp = SourceData+tempStr;                    Result.Add(strTemp);                    if (i < ListArr.Count - 1)                    {                        Descartes(ListArr, i + 1, Result, strTemp, MergeChar);                    }                }                            }            return "";        } 

读书人网 >C#

热点推荐