笛卡尔级的坐标生成
///根据每个集合的长度生成集合
public static List<int> Conversion(int a)
{
List<int> listints = new List<int>();
for (int i = 0; i < a; i++)
{
listints.Add(i);
}
return listints;
}
///根据每个长度的集合来生成笛卡尔级的集合
public static List<List<T>> AllCombinationsOf<T>(List<List<T>> sets)
{
var combinations = new List<List<T>>();
foreach (var value in sets[0])
combinations.Add(new List<T> { value });
foreach (var set in sets.Skip(1))
combinations = AddExtraSet(combinations, set);
return combinations;
}
private static List<List<T>> AddExtraSet<T>(List<List<T>> combinations, List<T> set)
{
var newCombinations =
from value in set from combination in combinations select new List<T>(combination) { value };
return newCombinations.ToList();
}
使用实例
List<List<int>> listInt = new List<List<int>>();
listInt.Add(new List<int>{0,1,2});
listInt.Add(new List<int>{0,1});
var AllCombinationsOf = CaptureBLL.AllCombinationsOf<int>(listInt);
//最后结果
AllCombinationsOf :
[{0,0},{0,1},{1,0},{1,1},{2,0},{2,1}]