2012-07-06 20 views
6

Estoy trabajando en un Kata en mi almuerzo y me he despegado ...LINQ - Lista de giros en <string> Dictionary <string, string>

He aquí los pasos que estoy tratando de seguir:

  • Dada una cadena de entrada, dividir la cadena por el carácter de nueva línea
  • Dado el resultado de matriz de cadena de la etapa anterior, omita el primer elemento en la matriz
  • Dada la colección de cadenas que resultan de la anterior paso, crea una colección que consta de cada 2 e ELEMENTOS

En esta última afirmación lo que quiero decir es, dada esta colección de 4 cuerdas:

{ 
    "string1", 
    "string2", 
    "string3", 
    "string4" 
} 

que debería terminar con esta colección de pares (es 'tuplas' el término correcto?):

{ 
    { "string1","string2" }, 
    { "string3","string4" } 
} 

empecé a ver ToDictionary, luego se trasladó a la selección de un tipo anónimo, pero no estoy seguro de cómo decir "volver los próximos dos cadenas como un par".

Mi código es similar a esto en el momento de la escritura:

public void myMethod() { 

    var splitInputString = input.Split('\n'); 

    var dic = splitInputString.Skip(1).Select(/* each two elements */); 
} 

Saludos para la ayuda!

James

Respuesta

4

Bueno, se podría utilizar (no probado):

var dic = splitInputStream.Zip(splitInputStream.Skip(1), 
           (key, value) => new { key, value }) 
          .Where((pair, index) => index % 2 == 0) 
          .ToDictionary(pair => pair.key, pair => pair.value); 

La parte Zip va a terminar con:

{ "string1", "string2" } 
{ "string2", "string3" } 
{ "string3", "string4" } 

... y el Where par utilizando el índice omitirá cualquier otra entrada (que sería "valor con la siguiente clave").

Por supuesto, si realmente sabe que tiene un List<string> para empezar, sólo podría acceder a los pares mediante un índice, pero eso es aburrido ...

+0

Exactamente lo que estaba buscando! No estaba al tanto de Zip, gracias por eso. –

Cuestiones relacionadas