具有静态IEnumerable的字频率<keyvaluepair <string,int =“”>&gt;

时间:2016-12-07 16:21:49

标签: c# multithreading linq dictionary

您好,

我写了这个函数来计算一个充满单词的列表中的元音。

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());
}

我打印了单词频率,但是我想用这个来计算元音的方式与此相同。

任何人都可以展示我如何改变吗?

要清楚,我在Sthmpa的线程函数中使用的函数ConcurrentBag ...

2 个答案:

答案 0 :(得分:3)

你可以试试这个:

public IEnumerable<KeyValuePair<string, int>> GetWordFrequency(List<string> words)
{
    return words.GroupBy(w => w)
                .Select((item) => new KeyValuePair<string, int>(item.Key, item.Count()));
}

答案 1 :(得分:0)

这是我的方法:

private IEnumerable<KeyValuePair<string, int>> GetOccurences(IEnumerable<string> words)
{
    return words.GroupBy(word => word, StringComparer.InvariantCultureIgnoreCase)
                .Select(group => new KeyValuePair<string, int>(group.Key, group.Count()))
                .OrderByDescending(kvp => kvp.Value);
}