遍历字符串数组并用 <key, value> 作为单词填充字典类型,occurenceCount --

Iterating through a string array and filling a dictionary type with <key, value> as word, occurenceCount --

我的问题如下-

我正在创建一个数组如下(参考图片---> https://pasteboard.co/JzJohvs.png)-

我想计算这个数组中单词的出现次数,并创建一个合适的数组列表或字典。

我的代码-

    public List<Dictionary<string, int>> GetWordCount(string[] myArray)
    {
        try
        {
            var countedObj = new List<Dictionary<string, int>>();

            Array.Sort(myArray);

            var counts = myArray.GroupBy(w => w).Select(g => new { Word = g.Key, Count = g.Count() }).ToList();

            for(int index=0; index<counts.Count; index++)
            {
                var item = counts.ElementAt(index);

                var itemkey = item.Word;

                var itemvalue = item.Count;

                countedObj.Add(new Dictionary<string, int>()
                {
                    
                });
            }

            return countedObj;
        }
        catch(Exception exp)
        {
            throw exp.InnerException;
        }
    }

我需要的是创建一个字典列表,例如

生命,3 固有的,2 有用, 1, 受过教育, 5, 合法, 2 等等……

基本上是键值对类型。我相信你会得到我基本上想要实现的目标。我可以根据需要在以后迭代和处理的东西。我怎样才能做到这一点?需要什么类型的迭代?这里有一些相关的代码建议。

您可以按单词分组,select 每组的计数(您已经在做),然后将其转换为以单词为键、计数为值的字典:

Dictionary<string, int> wordCounts = myArray
    .GroupBy(word => word)
    .ToDictionary(group => group.Key, group => group.Count());

所以该方法可以重写为:

public static Dictionary<string, int> GetWordCount(string[] myArray)
{
    return myArray?
        .GroupBy(word => word)
        .ToDictionary(group => group.Key, group => group.Count());
}

然后示例用法可能是:

var words = new[] {"one", "two", "two", "three", "three", "three"};

foreach (var item in GetWordCount(words))
{
    Console.WriteLine($"{item.Key} = {item.Value}");
}

输出

one = 1
two = 2
three = 3