使用LINQ将拆分字符串保存到arraylist

时间:2015-10-11 05:54:41

标签: c# string linq arraylist

我有一些代码,它接受一个字符串并通过将其分成单词来处理它,并给出每个单词的计数。

问题是它只返回success: $('#test').html("testing123") ,因为我只能在处理完成后打印到屏幕上。有什么方法可以将结果保存在void中,以便我可以将它返回给调用它的方法吗?

当前代码:

arraylist

谢谢。

2 个答案:

答案 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)部分。