2016-06-30 34 views
0

我有数据的列表:分裂逗号在列表分隔的字符串上的某些条件

Field 1 (String)  Field 2 (string) 

Pack1     51,52,53,55,56 
Pack2     51,53,54,57,59 

字段2包含逗号分隔的整数为字符串。

我也有一些代码:

public Class Pack 
{ 
    public string Field1{get;set;} 
    public string Field2{get;set;} 
} 

Ilist<Pack> lstPackIdList =new List<Pack>(); 
lstPackIdList.Add(new Pack{"Pack1","51,52,53,55,56"}); 
lstPackIdList.Add(new Pack{"Pack2","51,53,54,57,59"}); 

,我想将其转换到以下格式:

Field 1 (String)  Field 2 (string) 
Pack1     51,52,53 
Pack1     55,56 
Pack2     51 
Pack2     53,54 
Pack2     57 
Pack2     59 

用于分离场2的逻辑是:“如果在相邻值该字符串不是连续的数字字符串将被拆分。“

我怎么能更容易地应用这种逻辑,通过使用其他类型的集合,如'Dictionary'或'HashTable'而不是'List'。

+0

NO,这需要你自己的逻辑来编写。不只是使用任何内置的集合类。 – Rahul

回答

1

如何:

IEnumerable<Pack> result = lstPackIdList.Select(p => 
{ 
    int[] values = p.Field2.Split(',').Select(n => Convert.ToInt32(n)).ToArray(); 
    if (values.Length == 0) return Enumerable.Empty<Pack>(); 
    StringBuilder groups = new StringBuilder().Append(values[0]); 
    for (int i = 1; i < values.Length; i++) 
     groups.Append(Math.Abs(values[i] - values[i - 1]) == 1 ? "," : "-").Append(values[i]); 
    return groups.ToString().Split('-').Select(g => new Pack 
    { 
     Field1 = p.Field1, Field2 = g 
    }); 
}).SelectMany(p => p);