在進(jìn)行商品屬性模塊設(shè)計(jì)的時(shí)候,同一個(gè)商品可能有不同的屬性,不同值,這個(gè)時(shí)候,就會(huì)進(jìn)行不同的組合,于是就產(chǎn)生了SKU的概念,在這里比如說(shuō)某個(gè)用戶選擇了一個(gè)商品了,這個(gè)商品與如下的屬性和值,例如:以1開(kāi)頭的是一種屬性,"_"后邊的為屬性值,以此類推,那么可以組成多少個(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 listStrs17 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 else33 {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 }
聯(lián)系客服