笛卡尔级的坐标生成

 

///根据每个集合的长度生成集合
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}]

posted @ 2022-05-12 10:51  怕黑的孩纸  阅读(42)  评论(0编辑  收藏  举报