c#方法的话也不难,不过要想到用字典来做统计
public static void CountLetters(string str){
Dictionary<char, int> letterCount = new Dictionary<char, int>();
foreach(char c in str) {
if(char.IsLetter(c) {
char lowerLetter = char.ToLower(c);
if(letterCount.ContainsKey(lowerLetter)) {
letterCount[lowerLetter]++;
} else {
letterCount[lowerLetter] = 1;
}
}
}
var sortedLetters = letterCount.OrderByDescending(d => d.Value);
foreach(var item in sortedLetters) {
if(item.Value > 2){
Console.WriteLine($"字符{item.Key}出现了{item.Value}次。");
}
}
}
然后就是牛逼的一句话实现了。将string视为IEnumerable<char>,然后LINQ的各种拓展方法用上去。逻辑可以对照上面的具体方法一一对比
string str = "Hello,hi,World!hhhHHoo,ha!";
var resultStr = str.Where(s => char.IsLetter(s)).Select(s => char.ToLower(s)).
GroupBy(s => s).Select(g => new {CharName = g.Key, CharCount = g.Count()}).
OrderByDescending(e => e.CharCount).Where(e => e.CharCount > 2);
foreach (var item in resultStr) {
Console.WriteLine(item);
}