2012-12-31 114 views
1

大家的的FormCollection添加到字符串數組我有一個字符串[]的形式收集,看起來像這樣我怎麼能在C#

string[] formCollSkuOptionValueId=form.GetValues("txtskuopvaluetid"); 
string[] formCollSkuOptionNames=form.GetValues("txtSkuoptionName"); 
string[] formCollSkuOptionValues=form.GetValues("txSkuoptionvalues"); 

值在此的FormCollection loooks這樣

formCollSkuOptionNames={color,color,color,size,size,size,fit,fit} 
formCollSkuOptionValueId={37,38,39,40,41,42,50,51} 
formCollSkuOptionValues={Red,Black,Blue,X,Xl,XXl,Regular,Fit} 

什麼,我要做的就是,我有來串聯formCollSkuOptionValues究竟在哪兒的選項名稱相同 這樣

我想要的結果是在陣列這樣

string[] SkuOptionValueId={37_38_39},{40_41_42},{50_51} 
string[] SkuOptionValues={Red_Black_Blue},{X_Xl_XXl},{Regular_Fit} 

我怎麼能做到這一點,任何一個可以幫我做這件事是我一直在努力做的是

string SkuOptionName = string.Empty; 
string SkuOptionValues = string.Empty; 
string SkuOptionValueId = string.Empty; 
for (int i = 0; i < formCollSkuOptionValues.Length; i++) 
{ 
    int count = 0; 
    arrays.Clear(); 
    SkuOptionName = formCollSkuOptionNames[count]; 
    if (count != 0) 
    { 
     if (SkuOptionName == formCollSkuOptionNames[i]) 
     { 
      SkuOptionValues = SkuOptionValues + formCollSkuOptionValues[i] + ","; 
      SkuOptionValueId = SkuOptionValueId + formCollSkuOptionValueId[i] + ","; 
     } 
     arrays.Add(SkuOptionValues); 
     count++; 
    } 
    SkuOptionValues = SkuOptionValues + formCollSkuOptionValues[i] + ","; 
    SkuOptionValueId = SkuOptionValueId + formCollSkuOptionValueId[i] + ","; 
    //str.Remove(str.IndexOf(',')); 
} 

回答

0

你可以採取的linq優勢,並把它寫這個方式:

var namesAndIndexes = formCollSkuOptionNames.Select((e, i) => new { Name = e, Index = i }).ToList(); 

var nameValueIds = namesAndIndexes.Select(e => new { ValueId = formCollSkuOptionValueId[e.Index], Name = e.Name}); 
var nameValues = namesAndIndexes.Select(e => new { Value = formCollSkuOptionValues[e.Index], Name = e.Name }); 

var groupNameValueIds = nameValueIds.GroupBy(e => e.Name, a => a.ValueId); 
var groupNameValues = nameValues.GroupBy(e => e.Name, a => a.Value); 

var skuOptionValueId = groupNameValueIds.Select(e => e.Aggregate((a, b) => a + "_" + b)).ToArray(); 
var skuOptionValues = groupNameValues.Select(e => e.Aggregate((a, b) => a + "_" + b)).ToArray(); 

我認爲這是寫它的現代方式。忘記forif :)

+0

這個「var skuOptionValueId = nameValueIds.Select(e => e.Aggregate((a,b)=> a +」_「+ b))不支持聚合。ToArray );」 – user1940069

+0

我已更新答案。我錯過了分組部分。 –