应用场景:诸文件夹中视频合并,每个文件夹中取一个,找所有可用的组合。
网上找遍,未得所需,写其算法。
模型:以List<List<string>>模拟,代码如下:
static void Main(string[] args) { string s = string.Empty; List<List<string>> lists = new List<List<string>>(); var l1 = new List<string>() { "1", "2", "3", "4" }; var l2 = new List<string>() { "5", "6" }; var l3 = new List<string>() { "7", "8", "9", "0" }; var l4 = new List<string>() { "a", "b", "c"}; lists.Add(l1); lists.Add(l2); lists.Add(l3); lists.Add(l4); var lc = 1; foreach (var list in lists) lc *= list.Count; for (int i = 0; i <= lc - 1; i++) { s = string.Empty; for (int j = 0; j <= lists.Count - 1; j++) { var list = lists[j]; int multi = 1; for (int k = j + 1; k <= lists.Count - 1; k++) multi *= lists[k].Count; int index = (i / multi) % list.Count; s += list[index] + ","; } Console.Write(s.Trim(',') + " "); if ((i + 1) % 8 == 0) Console.Write("\r\n"); } Console.ReadLine(); }
输出如下:
所得满足需求。贴之,聊作备忘~