2010-07-02 30 views
5

Tengo una lista de cadenas en C# y quiero crear una lista de caracteres únicos que están en las cadenas de la lista, usando LINQ.usando LINQ en C# para convertir una lista <string> en una lista <char>

Hasta ahora he resuelto cómo convertir la Lista en una Lista, pero no puedo encontrar la manera de conseguir que el LINQ vaya más allá.

Lo que tengo hasta ahora es la siguiente:

List<string> dictionary = new List<string>(someArray); 
List<string[]> uniqueCharacters = dictionary.ConvertAll(s => s.Split()); 

Creo que necesito algo en la línea de

List<char> uniqueCharacters = 
    dictionary.ConvertAll(s => s.Split()).SelectAll(t, i=>t[i][0]); 

Respuesta

15

Puede utilizar el método SelectMany de LINQ, por ejemplo:

var list = new List<string> { "Foo", "Bar" }; 

var chars = list.SelectMany(s => s.ToCharArray()); 
var distinct = chars.Distinct(); 
+0

Lista uniqueCharacters = dictionary.SelectMany (s => s.ToCharArray()) Distinct(). ToList(); es lo que fui al final - gracias :) – simonalexander2005

+0

Usando un 'HashSet' al final' var distinct = new HashSet (chars) 'es otra alternativa razonable si la pregunta se interpreta de forma más liberal. Consulte también http://stackoverflow.com/questions/1388361/getting-all-unique-items-in-ac-list –

+0

La llamada 'ToCharArray' no es necesaria y tiene un pequeño impacto en el rendimiento porque los caracteres deben copiarse de la cadena fuente a una nueva matriz. Simplemente puede hacer 'list.SelectMany (s => s)' en su lugar. – LukeH

1

Obtenga su resultado LinQ y ponerlo en bucle, comparar cada Char con en la lista de char.

foreach (string character in dictionary) 
     { 
      if (!(uniqueCharacters).Contains(character)) 
      { 
       uniqueCharacters.Add(character); 
      } 
     } 
+0

Buena respuesta, pero yo tenía la esperanza de ser capaz de hacerlo todo en LINQ - para la experiencia de aprendizaje, si no otra cosa – simonalexander2005

+1

Su justo como un comando Sql DISTINCT escribe tu consulta de LinQ, y agrega Distinct() al final –

Cuestiones relacionadas