首页 > 代码库 > 计算单词出现的次数--linq

计算单词出现的次数--linq

         1、直接给出代码:声明数据,也可以是txt等文件,通过File类的静态方法读取其中的文本,再转换成List<string>数组。

         private static List<string> words = new List<string>             { "there", "is", "a",                 "great", "house", "and",                 "an", "amazing", "lake",                 "there", "is", "a",                 "computer", "running", "a",                 "new", "query", "there",                 "is", "a", "great",                 "server", "ready", "to",                 "process",                 "map", "and", "reduce" };

   2、把数据转换成Lookup<T,K>,Lookup和Dictionary字典有点像,其中的一个重要不同点在于,Lookup中的键值对可以重复出现。比如,可以出现键key="key01" 值value=http://www.mamicode.com/“01”的键值对两次,或者更多次。而Dictionary中的键只能出现一次,就像小时候用的字典一样,要查的汉字总是唯一的。下面这段代码生成的键值对是有一个单词和1组成。

 ILookup<string, int> map = words.AsParallel().ToLookup(p => p, k => 1);

  3、提取结果,Word存储单词,Count存储单词出现个数。

        var reduce = from IGrouping<string, int> wordMap in map                         select new                         {                             Word = wordMap.Key,                             Count = wordMap.Count()                         };

    reduce是统计各个单词个数,也可以加入过滤条件,选择符合需要的数据。例如,个数大于1且单词长度大于2的单词个数,只需加入Where条件即可(红色部分),代码如下。

           var reduce = from IGrouping<string, int> wordMap in map                         where (wordMap.Count()>1&&wordMap.Key.Length>2)                         select new                         {                             Word = wordMap.Key,                             Count = wordMap.Count()                         };            foreach (var item in reduce)            {                Console.WriteLine(item.Word + "\t" + item.Count);            }

        4、输出结果。可以看一下最后输出的结果。

技术分享

 

计算单词出现的次数--linq