在進(jìn)行商品屬性模塊設(shè)計(jì)的時(shí)候,,同一個(gè)商品可能有不同的屬性,,不同值,這個(gè)時(shí)候,,就會進(jìn)行不同的組合,,于是就產(chǎn)生了SKU的概念,在這里比如說某個(gè)用戶選擇了一個(gè)商品了,,這個(gè)商品與如下的屬性和值,,例如:以1開頭的是一種屬性,"_"后邊的為屬性值,,以此類推,,那么可以組成多少個(gè)不同的組合?,,組合一:1_22&2_4&6_333&7_77.....怎么用程序去實(shí)現(xiàn)呢,?
1 //產(chǎn)生的集合,這個(gè)集合的屬性個(gè)數(shù)是不確定的
2 List<string> listStrs = new List<string>()
3 {
4 "1_22",
5 "1_33",
6 "1_34",
7 "2_4",
8 "2_32",
9 "2_54",
10 //"6_333",
11 //"6_66",
12 //"7_77",
13 //"7_89"
14 };
15 //先分組
16 var groups = from str in listStrs
17 group str by str.Split('_')[0] into g
18 select g;
19
20 List<string> strResult = new List<string>();//定義最后的結(jié)果集合
21
22 //遍歷每個(gè)組
23 foreach (var groupStr in groups)
24 {
25 List<string> temp = new List<string>();//定義臨時(shí)集合
26 foreach (var item in groupStr)//遍歷組內(nèi)的所有的項(xiàng)
27 {
28 if (strResult.Count() <= 0)//如果是第一個(gè)分組遍歷那么只需要直接將分組的集合放到 臨時(shí)集合,,再放到最終集合
29 {
30 temp.Add(item);
31 }
32 else
33 {
34 //如果是第二個(gè)組之后的邏輯那么就 做組內(nèi)的每個(gè)項(xiàng)跟 最終集合做笛卡爾積
35 foreach (var target in strResult)//做最終集合跟 當(dāng)前組的組合乘積
36 {
37 temp.Add(target + "&" + item);//將項(xiàng)的相乘的結(jié)果做成組合項(xiàng)
38 }
39 }
40 }
41 strResult.Clear();//清空之前的數(shù)據(jù)
42 strResult.AddRange(temp);//將臨時(shí)集合的數(shù)據(jù)放到最終的結(jié)果集合里去
43 }