LINQ C#从字符串中选择字符

时间:2012-08-22 02:53:34

标签: c# linq

让我尽力解释这个。

基本上,我有一个字符串,我转换为char数组然后我使用LINQ选择char数组中的不同字符,然后通过Descending排序,但只捕获字符,而不是标点符号等。这里是代码:

string inputString = "The black, and, white cat";
var something = inputString.ToCharArray();
var txtEntitites = something.GroupBy(c => c)
                   .OrderByDescending(g => g.Count())
                   .Where(e => Char.IsLetter(e)).Select(t=> t.Key);

我收到错误消息:

  • 错误CS1502:`char.IsLetter(char)'的最佳重载方法匹配有一些无效参数(CS1502)

  • 错误CS1503:参数#1' cannot convert System.Linq.IGrouping'表达式以键入`char'(CS1503)

有什么想法吗?谢谢:))

4 个答案:

答案 0 :(得分:5)

试试这个:

string inputString = "The black, and, white cat"; 
var something = inputString.ToCharArray();  
var txtEntitites = something.GroupBy(c => c)
                            .OrderByDescending(g => g.Count())
                            .Where(e => Char.IsLetter(e.Key))
                            .Select(t=> t.Key);

请注意Char.IsLetter(e.Key))

另一个想法是重新排列您的查询:

varinputString = "The black, and, white cat"; 
var txtEntitites = inputString.GroupBy(c => c)
                              .OrderByDescending(g => g.Count())
                              .Select(t=> t.Key)
                              .Where(e => Char.IsLetter(e));

另请注意,由于inputString.ToCharArray()已经是String,因此您无需拨打IEnumerable<Char>

答案 1 :(得分:2)

在您的where子句中,该上下文中的e是您的分组,而不是字符。如果你想检查字符是否是一个字母,你应该测试你的密钥。

//...
.Where(g => Char.IsLetter(g.Key))

答案 2 :(得分:1)

我认为这就是你要找的东西

string inputString = "The black, and, white cat";
var something = inputString.ToCharArray();
var txtEntitites = something.Where(e => Char.IsLetter(e))
                   .GroupBy(c => c)
                   .OrderByDescending(g => g.Count()).Select(t=> t.Key);

答案 3 :(得分:-1)

List<char> charArray = (
      from c in inputString
      where c >= 'A' && c <= 'z'
      orderby c
      select c
   ).Distinct()
   .ToList();