首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

笛卡尔积-可以用于组合商品SKU

2012-09-16 
笛卡尔积-可以用来组合商品SKU有一组积合,如: Liststring listStrs new Liststring(){颜色_红,颜

笛卡尔积-可以用来组合商品SKU

有一组积合,如:

 List<string> listStrs = new List<string>()
                                        {
                                            "颜色_红",
                                            "颜色_绿",
                                            "颜色_兰",
                                            "颜色_紫",
                                            "颜色_青",
                                            "尺寸_大",
                                            "尺寸_中",
                                            "尺寸_小",
                                            "价格_9999",
                                            "价格_1000",
                                            "价格_99",
                                        };

_前面相同的的为一组,数据动态变化。求一共有多少组合,并输出。

比如笛卡尔积-可以用于组合商品SKU

 

代码://第一种方法用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 + "】条数据!");

 

 

热点排行