如何使用C# 笛卡尔乘积达到这种效果
笛卡尔乘积地址:http://blog.sina.com.cn/s/blog_53e74b270100oaim.html
调用:
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 />"); }
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; }
4&1&84&1&91&414&2&84&2&92&424&3&84&3&93&43
1234891&41&81&92&42&82&93&43&83&91&4&81&4&92&4&82&4&93&4&83&4&94&84&9
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 ""; }