我还处于学习C#的初级阶段,当我尝试按照文件中字符串出现次数排序时遇到了问题。
以下是我的代码:
string[] listLines = System.IO.File.ReadAllLines(@"F:\VS\AI.xls");
Array.Sort<string>(listLines); // sort alfabeticaly
System.Console.WriteLine("History of experienced feeds:");
/*
foreach (var line in listLines) //loop to return lines in alfabetical order
{
Console.WriteLine("\t" + line);
}
*/
// counts occurrences
var dict = new Dictionary<string, int>();
foreach (var value in listLines)
{
if (dict.ContainsKey(value))
dict[value]++;
else
dict[value] = 1;
}
foreach (var pair in dict)
Console.WriteLine("{1} times {0}", pair.Key, pair.Value);
System.Console.WriteLine("");
System.Console.WriteLine("Press Enter to see most common feeds:");
Console.ReadKey();
/* Finds duplicates and sorts them alphabetically */
System.Console.WriteLine("Most common:");
var duplicates = listLines.GroupBy(i => i)
.Where(g => g.Count() > 1)
.Select(g => g.Key);
foreach (var d in duplicates)
Console.WriteLine(d);
您可以看到,这个问题可以分为两部分。首先,我计算每个字符串出现的次数。然后,我只显示那些出现超过一次的字符串 - 按字母顺序排列。
我需要的是介于两者之间的东西:一种以重复出现的字符串按照出现次数从少到多的顺序显示的方法。
您能指导我实现这个正确的方法吗?
谢谢,
GroupBy
方法。这将创建一个分组,其中包含一个键(原始字符串)和按该键分组的项目集合。这样我们就可以查看匹配该键的项目数。这大致相当于SELECT s, count(*) from strings GROUP BY s ORDER BY count(*) DESCENDING
。 - Scott Hannen