根据第一列从csv文件中获取Distinct List
本文关键字:文件 csv 获取 List Distinct 一列 | 更新日期: 2023-09-27 18:20:53
我有以下从csv文件中提取的字符串列表。。。
List<string> listOfRecords;
列表中的每一行都是一个字符串。。。
one,bob,black
two,steve,smith
three,bill,brown
one,jill,brown
one,sue,smith
我想根据每行的第一个值删除重复项。导致…
one,bob,black
two,steve,smith
three,bill,brown
我以为代码看起来像。。。。
distinctlist = Select listOfRecords.split(',')[0].distinct
这显然是错误的,但我想避免列出一系列的清单并这样做。思考linq会更简单。
我能在这里找到的所有帖子似乎都很复杂,或者没有解决我问题的细节。任何帮助都将不胜感激。。。
简单的GroupBy
:
var distinctByFirstColumn = listOfRecords
.GroupBy(x => x.Split(',')[0])
.Select(x => x.First());
我宁愿使用HashSet<String>
和简单的foreach
循环,而不是Linq(IMHO是过冲):
var distinctList = new List<String>();
HashSet<String> taken = new HashSet<String>();
foreach (var line in listOfRecords)
// you don't want to split all the line, but 1st item only
if (taken.Add(line.SubString(0, line.IndexOf(',')))
distinctList.Add(line);
编辑:如果是真实csv文件:
private static IEnumerable<String> CsvDistinctLines(String fileName) {
HashSet<String> taken = new HashSet<String>();
foreach (var line in File.ReadLines(fileName))
if (taken.Add(line.SubString(0, line.IndexOf(',')))
yield return line;
}
...
var distinctList = CsvDistinctLines(@"C:'MyFile.csv").ToList();