问题描述
我的问题如下-
我正在创建如下数组(请参阅图片---> https://pasteboard.co/JzJohvs.png)-
我想计算该数组中单词的出现次数,并创建一个合适的arraylist或字典。
我的代码-
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 等等……
基本上是键值对类型。我相信您能达到我基本上打算实现的目标。我可以根据需要在以后进行迭代和处理。我怎样才能做到这一点?需要哪种类型的迭代?一些相关的代码建议。
解决方法
您可以按单词分组,选择每个组(您已经在做的)的计数,然后将其转换为字典,以单词为键,计数为值:
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","three","three"};
foreach (var item in GetWordCount(words))
{
Console.WriteLine($"{item.Key} = {item.Value}");
}
输出
one = 1
two = 2
three = 3