C#中字符串集合的排列

好像我再次陷入递归算法……

我的应用程序应该根据用户指定的信息并根据由以下字符串表示的子文件夹结构将文件排序到不同的文件夹:

[ROOT] \ brand \ color \ material \ 

结构字符串中的标记表示集合:

假设:

 var brand = new List { "Nike", "Adidas", "Reebok" }; var color = new List { "red", "blue", "yellow", "black" }; var material = new List { "leather", "fabric" }; var data = new List<List>() { brand, color, material }; 

而我想要得到的是:

 [ROOT]\Nike\red\leather [ROOT]\Nike\red\fabric [ROOT]\Nike\blue\leather [ROOT]\Nike\blue\fabric [ROOT]\Nike\yellow\leather [ROOT]\Nike\yellow\fabric [ROOT]\Nike\black\leather [ROOT]\Nike\black\fabric [ROOT]\Adidas\red\leather [ROOT]\Adidas\red\fabric [ROOT]\Adidas\blue\leather [ROOT]\Adidas\blue\fabric [ROOT]\Adidas\yellow\leather [ROOT]\Adidas\yellow\fabric [ROOT]\Adidas\black\leather [ROOT]\Adidas\black\fabric [ROOT]\Reebok\red\leather [ROOT]\Reebok\red\fabric [ROOT]\Reebok\blue\leather [ROOT]\Reebok\blue\fabric [ROOT]\Reebok\yellow\leather [ROOT]\Reebok\yellow\fabric [ROOT]\Reebok\black\leather [ROOT]\Reebok\black\fabric 

问题是数据标签(品牌,颜色,材料)及其顺序的数量是事先不知道的,因此需要递归。

任何的想法?

非常感谢你提前!

这是代码作者Eric Lippert。 笛卡尔积..

http://ericlippert.com/2010/06/28/computing-a-cartesian-product-with-linq/

 public static IEnumerable> CartesianProduct(this IEnumerable> sequences) { // base case: IEnumerable> result = new[] { Enumerable.Empty() }; foreach (var sequence in sequences) { var s = sequence; // don't close over the loop variable // recursive case: use SelectMany to build the new product out of the old one result = from seq in result from item in s select seq.Concat(new[] { item }); } return result; } 

 var result = CartesianProduct(new List>() {brand,color,material }); 

用法示例:

 var brand = new List { "Nike", "Adidas", "Reebok" }; var color = new List { "red", "blue", "yellow", "black" }; var material = new List { "leather", "fabric" }; foreach (var row in CartesianProduct(new List>() { brand, color, material })) { Console.WriteLine(String.Join(",", row)); }