2009-05-26 7 views
0

j'ai un tableau ci-dessousune question gamme

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"; 

je dois transformer comme ci-dessous

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

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

comment est-ce possible?

+1

Je ne suis pas ce que vous voulez que cette transformation fasse ... comment l'entrée se rapporte-t-elle à la sortie? –

+1

Je suis assez sûr qu'il veut que la sortie soit groupée par le premier nombre dans les chaînes d'entrée (c'est-à-dire "1, 3" et "1, 4" sont mis dans le même seau.) – mquander

+0

Ahh, donc il y a une faute de frappe dans les données d'entrée, il devrait commencer par "1,1" –

Répondre

10

Je pense que ce que vous voulez réellement est probablement ceci:

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

Cela renverra les éléments comme une énumération groupée.

Pour retourner une liste de listes, ce qui est ce que vous littéralement demandé, essayez:

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

Il n'y a pas de raccourci comme ça. Vous devrez casser dans une boucle et diviser chaque rangée et ajouter à la liste.

+4

Oui, il y a. – mquander

+0

Entrez le grand et puissant LINQ! : P – jrista

0

Version non LINQ (je dois admettre que son beaucoup plus laid, mais vous pouvez avoir pas d'autre choix)

 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); 
     }