笛卡尔乘积算法的体现

一个商品有多项属性,多项属性的组合就产生不同的商品型号如:
衣服:
    颜色:红、绿
    尺寸:大、中、小

产生的系列就有:红|大、红|中、红|小、绿|大、绿|中、绿|小
如果商品的属性不至两个,则产生的系列会更多, A|B|C|D......
其实这是一个笛卡尔的乘积
绿
红|大绿|大
红|中绿|中
红|小绿|小

如果再多一个属性(衣料): 绵、布、锦 ,也可以与上面的结果相乘,得

红|大红|中红|小绿|大绿|中绿|小
红|大|绵红|中|绵红|小|绵绿|大|绵绿|中|绵绿|小|绵
红|大|布红|中|布红|小|布绿|大|布绿|中|布绿|小|布
红|大|锦红|中|锦红|小|锦绿|大|锦绿|中|锦绿|小|锦

这样就算有再多的属性也可以随机生成结果,以下的实现的代码:
ExpandedBlockStart.gif ContractedBlock.gif          /**/ /// <summary>
InBlock.gif        
/// 获取商品属性组合后的列表
InBlock.gif        
/// </summary>
InBlock.gif        
/// <param name="attrList">属性列表数组,数组内的成员以‘|’分隔</param>
ExpandedBlockEnd.gif        
/// <returns>返回属性组合后的列表</returns>

None.gif          private   static  IList < string >  GetProductModelList(IList < string >  attrList)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            IList
<string> productArray = new List<string>(attrList[0].Split('|'));
InBlock.gif
InBlock.gif            
for (int i = 1; i < attrList.Count; i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                productArray 
= JoinPart(productArray, attrList[i].Split('|'));
ExpandedSubBlockEnd.gif            }

InBlock.gif            
return productArray;
ExpandedBlockEnd.gif        }

None.gif
None.gif        
// 笛卡尔乘积
None.gif
         private   static  IList < string >  JoinPart(IList < string >  part1,  string [] part2)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            IList
<string> result = new List<string>();
InBlock.gif            
foreach (string str1 in part1)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
foreach (string str2 in part2)
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    result.Add(str1 
+ "|" + str2);
ExpandedSubBlockEnd.gif                }

ExpandedSubBlockEnd.gif            }

InBlock.gif            
return result;
ExpandedBlockEnd.gif        }

转载于:https://www.cnblogs.com/ghx88/archive/2007/01/29/633655.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值