7

char配列に変換する文字列があり、LINQを使用してchar配列内のさまざまな文字を選択し、降順で並べ替えますが、句読点などではなく、文字のみをキャッチします...

コードは次のとおりです。

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' は 'System.Linq.IGrouping<char,char>' 式を型 'char' に変換できません (CS1503)

何か案は?ありがとう :)

4

4 に答える 4

9

これを試して:

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

別のアイデアは、クエリを再配置することです。

var inputString = "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>.

于 2012-08-22T02:56:29.357 に答える
2

where句でeは、そのコンテキストでは、文字ではなくグループ化されています。文字が文字かどうかを確認したい場合は、キーをテストする必要があります。

//...
.Where(g => Char.IsLetter(g.Key))
于 2012-08-22T02:56:10.567 に答える
2
List<char> charArray = (
      from c in inputString
      where c >= 'A' && c <= 'z'
      orderby c
      select c
   ).Distinct()
   .ToList();
于 2016-11-02T14:42:03.290 に答える
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);
于 2012-08-22T04:03:26.287 に答える