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

该博客介绍了如何利用Linq处理动态数据,通过分组和笛卡尔积的方法计算商品属性(如颜色、尺寸、价格)的所有可能组合,并输出组合总数。示例代码展示了具体的实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有一组积合,如:

 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 + "】条数据!");

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值