2009-05-26 2 views
0

я есть массив нижемассив вопрос

string stringArray = new stringArray[12]; 

stringArray[0] = "0,1"; 
stringArray[1] = "1,3"; 
stringArray[2] = "1,4"; 
stringArray[3] = "2,1"; 
stringArray[4] = "2,4"; 
stringArray[5] = "3,7"; 
stringArray[6] = "4,3"; 
stringArray[7] = "4,2"; 
stringArray[8] = "4,8"; 
stringArray[9] = "5,5"; 
stringArray[10] = "5,6"; 
stringArray[11] = "6,2"; 

мне нужно преобразовать, как показано ниже

List<List<string>> listStringArray = new List<List<string>>(); 

listStringArray[["1"],["3","4"],["1","4"],["7"],["3","2","8"],["5","6"],["2"]]; 

как это возможно?

+1

Im не следует за тем, что вы хотите, чтобы это преобразование ... как входные данные относятся к выходу? –

+1

Я уверен, что он хочет, чтобы выход был сгруппирован первым числом во входных строках (т.е. «1, 3» и «1, 4» попали в одно и то же ведро.) – mquander

+0

Ahh, так что есть опечатка во входных данных должна начинаться с «1,1» –

ответ

10

Я думаю, что вы на самом деле хотите, вероятно, это:

var indexGroups = x.Select(s => s.Split(',')).GroupBy(s => s[0], s => s[1]); 

Это будет возвращать элементы, сгруппированных перечисления.

Чтобы вернуть список списков, который является то, что вы буквально просили, а затем попробовать:

var lists = x.Select(s => s.Split(',')).GroupBy(s => s[0], s => s[1]) 
      .Select(g => g.ToList()).ToList(); 
0

Нет такой стенографии. Вам придется разбить петлю и разделить каждый массив и добавить в список.

+4

Да, есть. – mquander

+0

Введите отличный и мощный LINQ! :П – jrista

0

Non LINQ версия (я должен признать его гораздо уродливее, но не может быть никакого выбора)

 var index = new Dictionary<string, List<string>>(); 
     foreach (var str in stringArray) { 
      string[] split = str.Split(','); 
      List<string> items; 
      if (!index.TryGetValue(split[0], out items)) { 
       items = new List<string>(); 
       index[split[0]] = items; 
      } 
      items.Add(split[1]); 
     } 

     var transformed = new List<List<string>>(); 
     foreach (List<string> list in index.Values) { 
      transformed.Add(list); 
     } 
Смежные вопросы