GroupBy从IEnumerable对象列表中删除重复项
我有一个重复的名称列表,我想获取没有重复项的列表。GroupBy从IEnumerable对象列表中删除重复项
CSVCategories = from line in File.ReadAllLines(path).Skip(1)
let columns = line.Split(',')
select new Category
{
Name = columns[9]
};
var results = CSVCategories.GroupBy(x => x.Name)
.Select(g => g.FirstOrDefault())
.ToList();
我尝试看看使用下面的循环中的元素和调试,但它仍然从列表中返回重复的,包括空值空字符串:
foreach(var item in results)
{
Console.WriteLine(item.Name);
}
我注意到results
变量把我带回包含重复的列表,但只有在他们的外壳不同。
E.g.我原来的名单CSVCategories包含的元素:[ “家”, “家”, “EmptyString”, “家”, “城”, “城”, “公园”]
用的GroupBy当去复制, results
查询返回[“家”,“家”,“EmptyString”,“城市”,“公园”],所以这种工作。保持空的值和具有不同套管的值。
现在我需要找到一种方法来删除外壳重复项和空字符串。
鲜明的调用不工作很可能是因为您的类别类不具有的Equals和GetHashCode的正确实施。
您有两种选择。正确地覆盖Equals和GetHashCode方法,或者使用Hashset来检查Name是否已经添加。
var uniqueNames = new Hashset<string>();
// Original select statement
CSVCategories = CSVCategories.Where(x => uniqueName.Add(x.Name)).ToList();
'let columns = line.Split(',')'表明'columns'是'string []'因此'columns [9]'是'string'。 – stt106
你忘了选择新的类别{Name = columns [9]} –
Related posts:http://stackoverflow.com/questions/1606679/remove-duplicates-in-the-list-using-linq或http://stackoverflow.com/questions/37850167/delete-duplicates-in- a-list-of-int-arrays/37850231#37850231 –