从文件中读取并计算列表中的单词

时间:2016-03-19 04:44:05

标签: c#

我正在使用C#读取csv文件并吐出新行中的所有单词。然后我想计算该文件中每个单词在列表中重复的次数。我得到的输出不包括单词。请参阅以下信息

csv文件内容: 她人很好 他可以很好 哦哇这很棒

这是代码:

using System;
using System.IO;
using System.Linq;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var list = File.ReadAllLines("Try3.csv");
        foreach (string line in File.ReadAllLines("Try3.csv"))

        { 
            string[] parts = line.Split(' ');
            foreach (string part in parts)
            {

                var q = list.GroupBy(x => x)
                    .Select(g => new {Value = g.Key, Count = g.Count()})
                    .OrderByDescending(x=>x.Count);
                foreach (var x in q){
                Console.WriteLine("{0}",part+" Count:"+ x.Count);
        }


    }
    }   
  }
   }

这是我得到的输出:

[output]

请问好吗?

1 个答案:

答案 0 :(得分:1)

试试这个

var results = File.ReadLines("Try3.cvs")
                  .SelectMany(line => line.Split(' '))
                  .GrooupBy(word => word)
                  .ToDictionary(g => g.Key, g => g.Count());

首先使用File.ReadLines意味着您一次只能读取一行,而不是在处理之前将整个文件加载到内存中。如果文件大小很大,这可能会有所帮助。然后,只需将这些行拆分为单词然后对这些单词进行分组即可创建一个字典,该字典将包含键中的单词以及它在文件中显示的值作为值。

要按计数顺序获得结果,您可以选择执行以下操作。

var results = File.ReadLines("Try3.cvs")
                  .SelectMany(line => line.Split(' '))
                  .GrooupBy(word => word)
                  .OrderByDescending(g => g.Count())
                  .Select(g => new { Word = g.Key, Count = g.Count() })
                  .ToList();