【问题标题】:Saving a split string to an arraylist using LINQ使用 LINQ 将拆分字符串保存到数组列表
【发布时间】:2015-10-11 05:54:41
【问题描述】:

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

问题是它只返回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()));

谢谢。

【问题讨论】:

  • 如果你存储在一个数组列表中,你怎么知道哪个单词对应哪个计数?你不想使用字典之类的数据结构吗?

标签: c# string linq arraylist


【解决方案1】:

试试这个代码

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&lt;KeyValuePair&lt;string, int&gt;&gt;,其中包含所有单词及其按降序排列的计数。

如何使用它,也显示在最后一行。

而不是从列表中取出first 20,如果您想取出整个列表,请删除此.Take(20) 部分。

【讨论】:

    【解决方案2】:

    首先,通过调用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());
    }
    

    【讨论】:

    • 我希望我可以将结果保存到 arrayList 中。谢谢
    • @ana:所以,接受答案,或者如果没有解决方案,请编辑您的问题并解释解决方案以解决您的问题。祝你好运。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-10
    • 1970-01-01
    • 1970-01-01
    • 2017-03-14
    • 2012-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多