文字列内の文字の出現をカウントする方法は?
たとえば、次の入力文字列があるとします。
test text
出力は次のようになります。
t 4
e 2
s 1
x 1
コンパイルしてテストしなくても、以下のlinqのようなものでうまくいくはずです。
from c in str
group by c into g
select new { letter= g.Key, count= g.Count()}
var str = "abc cccdd";
var group = from c in str
group c by c into g
select g;
foreach(var g in group)
{
Console.WriteLine(string.Format("{0}\t{1}", g.Key, g.Count()));
}
これを実行する別の方法は、ルーク・マクレガーの答えと同じです。
string mystring = "test text";
var result = mystring.GroupBy(ch => ch).Select(a => new {chr = a.Key, count = a.Count()});
再帰的ソリューション
空白もカウントすることに注意してください。以前は空白を削除できました。
public static void GroupString(string str)
{
if (str.Length == 1)
Console.WriteLine(str[0] + " 1");
else
{
Console.WriteLine(str[0] + " "+ str.Count(c => c == str[0]));
GroupString(str.Replace(str[0].ToString(),""));
}
}