有一组积合,如:
List<string> listStrs = new List<string>()
{
"颜色_红",
"颜色_绿",
"颜色_兰",
"颜色_紫",
"颜色_青",
"尺寸_大",
"尺寸_中",
"尺寸_小",
"价格_9999",
"价格_1000",
"价格_99",
};
_前面相同的的为一组,数据动态变化。求一共有多少组合,并输出。
比如
代码://第一种方法用Linq表达式分组
var groups = from str in listStrs
group str by str.Split('_')[0]
into g
select g;
List<string> strResult = new List<string>();//定义最后的结果集合
//遍历每个组
foreach (var groupStr in groups)
{
List<string> temp = new List<string>();//定义临时集合
foreach (var item in groupStr)//遍历组内的所有的项
{
if (strResult.Count() <= 0)//如果是第一个分组遍历那么只需要直接将分组的集合放到 临时集合,再放到最终集合
{
temp.Add(item);
}
else
{
//如果是第二个组之后的逻辑那么就 做组内的每个项跟 最终集合做笛卡尔积
foreach (var target in strResult)//做最终集合跟 当前组的组合乘积
{
temp.Add(target + "&" + item);//将项的相乘的结果做成组合项
}
}
}
strResult.Clear();//清空之前的数据
strResult.AddRange(temp);//将临时集合的数据放到最终的结果集合里去
}
int count = 0;
foreach (var item in strResult)
{
Console.WriteLine(item);
count++;
}
Console.WriteLine("一共有【" + count + "】条数据!");