使用C#中的LINQ将List<string>转换为List<char>

6

我有一个C#字符串列表,想要使用LINQ创建一个只包含这些字符串中唯一的字符的列表。

我已经将List转换为List,但我无法弄清楚如何使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]);
2个回答

16
您可以使用LINQ的SelectMany方法,例如:
var list = new List<string> { "Foo", "Bar" };

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

最终我选择了这个:List<char> uniqueCharacters = dictionary.SelectMany(s => s.ToCharArray()).Distinct().ToList(); 谢谢 :) - simonalexander2005
如果问题的解释更自由,使用HashSet在结尾处var distinct = new HashSet(chars)是另一种合理的选择。 参见https://dev59.com/a3M_5IYBdhLWcg3waSb9 - Ian Mercer
ToCharArray调用是不必要的,并且对性能影响很小,因为字符需要从源字符串复制到新数组中。您可以使用list.SelectMany(s => s)代替。 - LukeH

1

获取您的 LinQ 结果并将其放入循环中,将每个字符与字符列表进行比较。

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

很好的回答,但我希望能够完全使用LinQ来完成 - 至少为了学习经验。 - simonalexander2005
1
就像一个 SQL 命令 DISTINCT 一样,编写你的 LinQ 查询,并在最后添加 Distinct()。 - Serkan Hekimoglu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接