简体   繁体   中英

LINQ C# Selecting characters from string

I have a string that I convert to a char array and then I use LINQ to select the different characters inside the char array and then order them by Descending but only catch the characters, not the punctuation marks etc...

Here is the code:

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);

And the error message I get:

  • Error CS1502: The best overloaded method match for `char.IsLetter(char)' has some invalid arguments (CS1502)

  • Error CS1503: Argument '#1' cannot convert 'System.Linq.IGrouping<char,char>' expression to type `char' (CS1503)

Any ideas? Thanks :)

Try this:

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);

Note the Char.IsLetter(e.Key))

Another idea is to rearrange your query:

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));

Also note you don't need the call to inputString.ToCharArray() since String is already an IEnumerable<Char> .

In your where clause, e in that context is your grouping, not the character. If you want to check if the character is a letter, you should be testing your key.

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

I think this is what you are looking for

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);
List<char> charArray = (
      from c in inputString
      where c >= 'A' && c <= 'z'
      orderby c
      select c
   ).Distinct()
   .ToList();

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM