2010-07-02 109 views
5

我有一个C#中的字符串列表,并希望使用LINQ创建列表中的字符串中的唯一字符列表。在C#中使用LINQ将列表<string>转换为列表<char>

我到目前为止已经制定了如何将列表变成列表,但我无法弄清楚如何让LINQ走得更远。

我至今如下:

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

我相信我需要沿着

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

回答

15

您可以使用LINQ的的SelectMany方法,如:

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

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

列表 uniqueCharacters = dictionary.SelectMany(s => s.ToCharArray())。Distinct()。ToList(); 最后我去了 - 谢谢:) – simonalexander2005 2010-07-02 08:02:34

+0

如果问题解释更加宽松,在末尾使用'HashSet'' var distinct = new HashSet(chars)'是另一种合理的选择。另请参阅http://stackoverflow.com/questions/1388361/getting-all-unique-items-in-ac-list – 2010-07-02 08:08:55

+0

“ToCharArray”调用是不必要的,并且对性能影响很小,因为需要将字符从将源字符串转换为新数组。你可以用'list.SelectMany(s => s)'来代替。 – LukeH 2010-07-02 09:05:02

1

线的东西让您的LinQ结果,并把它放在循环,比较每个字符在char列表中。

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

很好的回答,但我希望能够做到这一切在LINQ - 的学习经验,如果没有别的 – simonalexander2005 2010-07-02 07:48:16

+1

它只是像一个Sql命令DISTINCT 编写你的LinQ查询,并最后添加Distinct() – 2010-07-02 07:51:27

相关问题