namespace IStation
|
{
|
static class Expand
|
{
|
/// <summary>
|
/// 笛卡尔乘积
|
/// </summary>
|
public static List<List<T>> CartesianProduct<T>(this List<List<T>> lstSplit)
|
{
|
long count = 1;
|
lstSplit.ForEach(item => count *= item.Count);
|
//count = lstSplit.Aggregate(1, (result, next) => result * next.Count);
|
|
var lstResult = new List<List<T>>();
|
|
for (long i = 0; i < count; ++i)
|
{
|
var lstTemp = new List<T>();
|
long j = 1;
|
lstSplit.ForEach(item =>
|
{
|
j *= item.Count;
|
var index = (i / (count / j)) % item.Count;
|
var index_int = (int)index;
|
lstTemp.Add(item[index_int]);
|
});
|
lstResult.Add(lstTemp);
|
}
|
return lstResult;
|
}
|
|
|
}
|
}
|