我有一些代码,它接受一个字符串并通过将其分成单词来处理它,并给出每个单词的计数。
问题是它只返回success: $('#test').html("testing123")
,因为我只能在处理完成后打印到屏幕上。有什么方法可以将结果保存在void
中,以便我可以将它返回给调用它的方法吗?
当前代码:
arraylist
谢谢。
答案 0 :(得分:0)
首先,通过拨打Take(20)
,您只需要前20个单词并将其他单词放在一边。因此,如果您想要所有结果,请将其删除
之后,您可以这样做:
var words = message.Split(' ').
Where(messagestr => !string.IsNullOrEmpty(messagestr)).
GroupBy(messagestr => messagestr).
OrderByDescending(groupCount => groupCount.Count()).
ToList();
words.ForEach(groupCount => Console.WriteLine("{0}\t{1}", groupCount.Key, groupCount.Count()));
要将结果放入其他数据结构中,您可以使用以下方法之一:
var w = words.SelectMany(x => x.Distinct()).ToList(); //Add this line to get all the words in an array
// OR Use Dictionary
var dic = new Dictionary<string, int>();
foreach(var item in words)
{
dic.Add(item.Key, item.Count());
}
答案 1 :(得分:0)
试试此代码
var wordCountList = message.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
.GroupBy(messagestr => messagestr)
.OrderByDescending(grp => grp.Count())
.Take(20) //or take the whole
.Select(grp => new KeyValuePair<string, int>(grp.Key, grp.Count()))
.ToList(); //return wordCountList
//usage
wordCountList.ForEach(item => Console.WriteLine("{0}\t{1}", item.Key, item.Value));
如果需要,您可以按降序返回包含所有字词及其计数的wordCountList
List<KeyValuePair<string, int>>
。
如何使用它,也显示在最后一行。
而不是从列表中选择first 20
,如果您想要取整体,请删除此.Take(20)
部分。