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=“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、输出结果。可以看一下最后输出的结果。
时间: 2024-10-04 07:03:29