使用LINQ将拆分字符串保存到数组列表
本文关键字:数组 列表 保存 字符串 LINQ 拆分 使用 | 更新日期: 2023-09-27 18:17:11
我有一些代码,它接受一个字符串,并通过将其分成单词来处理它,并给出每个单词的计数。
问题是它只返回void
,因为我只能在处理完成后打印到屏幕上。有什么方法可以将结果保存在arraylist
中,以便我可以将其返回给调用它的方法吗?
当前代码:
message.Split(' ').Where(messagestr => !string.IsNullOrEmpty(messagestr))
.GroupBy(messagestr => messagestr).OrderByDescending(groupCount => groupCount.Count())
.Take(20).ToList().ForEach(groupCount => Console.WriteLine("{0}'t{1}", groupCount.Key, groupCount.Count()));
谢谢。
试试这个代码
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)
部分。
首先,通过调用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());
}