C#:从.CSV生成一个表,用于计算另一个表中的名称(字符串)出现次数

时间:2017-04-07 10:48:03

标签: c# csv

我从带有标题的.csv文件导入数据表,这没问题 因此,我们调用文件dt.csv

一个列标题名为companyName

但是我需要创建一个新表,首先,我列出第一个数据表中的所有公司,并计算每个companyName在第一个表中出现的次数。

第一个表格可以有500到5000行,但出现的不同公司数量只有15-50。面临的挑战是我不知道提前预期的公司名称,所以我不能列出一个肯定的名单来反对。我需要根据列companyName的内容来计算要生成的列表(这样我就不会得到相同名称的重复项)。

2 个答案:

答案 0 :(得分:0)

此代码是C#,但主要是伪代码,因为我不确定您读取/写入CSV文件的方法:

var seenCompanies = new List<string>();
foreach(var line in csvFile)
{
    seenCompanies.Add(line.GetColumn("companyName"));
}

var companiesAndCounts = 
    seenCompanies
    .GroupBy(s => s)
    .Select(group => new { Name = group.Key, Count = group.Count()})
    .ToList();

foreach(var group in companiesAndCounts)
{
    outputFile.Write(group.Name + "," + group.Count);
}

这在概念上非常标准,你所做的只是计算每个不同公司名称的出现次数,然后将其写出来。

您可以根据自己的需要进行调整,但这足以说明如何实现这一目标。

答案 1 :(得分:0)

您也可以使用System.Generics.Dictionary

//I used this list to test, you should replace "companies" with a list from you csv file
List<string> companies = new List<string>(){"c1","c2","c1","c4","c3","c3","c3","c2"};

Dictionary<string,int> numberOfAppearance = new Dictionary<string,int>();

foreach(string company in companies)
{
    if(numberOfAppearance.ContainsKey(company))
        numberOfAppearance[company]++;
    else
        numberOfAppearance.Add(company, 1);
}
//Now numberOfAppearance["companyName"] holds the number of appearances of the company named companyName in the list

我创建了一个List以保存所有公司名称,因为我不知道如何从csv文件中存储它们,但它应该很容易适应。