CsvHelper如何过滤列并仅返回不同的值 [英] CsvHelper how to filter a column and return only distinct values
问题描述
我在C#中使用CsvHelper.我想过滤我的ORIGTITLE列以获取不同的值,并将其存储在Dictionary集合中.因此,在我的词典集合中,我应该具有以下值.我该怎么做?
I am using CsvHelper in C#. I want to filter my ORIGTITLE column for distinct values and store those in the Dictionary collection. So in my Dictionary collection I should have the values below. How can I accomplish this ?
[Abbrechen,Ab] [Abgleichen,translate1] [Abgrenzung,某事] [树,鲍姆]
[Abbrechen,Ab] [Abgleichen,translate1] [Abgrenzung,Something] [Tree,Baum]
我的.csv文件如下:
My .csv file looks like this:
ORIGTITLE;REPLACETITLE;ORIGTOOLTIP
Abbrechen;Ab;Abbrechen
Abbrechen;Abort;abgelaufen
Abgleich;translate1;
Abgrenzung;Something;Abgrenzung zum Konto
Tree;Baum;Baum
Tree;Leaf;Baum
到目前为止,这是我的C#代码:
Here is my C# code so far:
class DataRecord
{
public string ORIGTITLE { get; set; }
public string REPLACETITLE { get; set; }
public string ORIGTOOLTIP { get; set; }
}
public void CsvReader()
{
using (StreamReader streamReader = new StreamReader(@"C:\Users\Devid\Desktop\Newtest.txt"))
{
CsvReader reader = new CsvReader(streamReader);
reader.Configuration.Encoding = Encoding.UTF8;
reader.Configuration.Delimiter = ";";
List<DataRecord> records = reader.GetRecords<DataRecord>().ToList();
//records has to be a distinct list
Dictionary<string, string> dict = new Dictionary<string, string>();
foreach (DataRecord record in records)
{
dict.Add(record.ORIGTITLE, record.REPLACETITLE);
//i get a error because the key is not distinctq
}
}
}
推荐答案
在添加密钥之前检查密钥是否存在:
Check if the key exists before you add it:
if (!dict.ContainsKey(record.ORIGTITLE))
{
dict.Add(record.ORIGTITLE, record.REPLACETITLE);
}
这对于大型数据集而言效果不佳.考虑使用LINQ来获取不同的值.
This will not perform very well for big datasets. Consider using LINQ to get distinct values instead.
这篇关于CsvHelper如何过滤列并仅返回不同的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!