【发布时间】:2016-12-07 16:21:49
【问题描述】:
你好,
我写了这个函数来计算一个完整的单词列表中的元音。
static IEnumerable<KeyValuePair<char, int>> Sthmpa(string sourceItem)
{
return sourceItem.ToLower()
.Where(c => "aeiou".Contains(c))
.GroupBy(c => c, (c, instances) => new KeyValuePair<char, int>(c, instances.Count()));
}
我想更改此返回以计算列表中的单词频率。
这是一个充满单词的列表。
static IList<string> lines = new List<string>();
像这样:
var g = lines.GroupBy(words=> words);
foreach (var grp in g)
{
Console.WriteLine("{0} {1}", grp.Key, grp.Count());
}
我打印了词频,但我想让这个像我计算元音一样。
谁能告诉我如何改变?
要清楚,我在线程函数中使用的函数SthmpaConcurrentBag...
【问题讨论】:
-
lines可以有多少个单词?因为您似乎试图解决此问题的方式可能会出现非常严重的性能问题。 -
我不知道程序中有多少个单词,因为我是从一些文件中获取它们的。也许我可以数一数,但是……
-
每行是一个词还是每行可以有多个词?
-
每行可以有多个单词
-
您可能希望在返回数据之前在其中抛出一个
.ToList(),每次评估返回的IEnumerable<KeyValuePair<char, int>>时,它都会重新运行Where和GroupBy,通过放置在返回结果之前将其发送到ToList(),它将在重复使用期间使用缓存的结果。
标签: c# multithreading linq dictionary