我一直在寻找一种方法来过滤掉列表中的重复项以填充表单,但到目前为止,我发现只需使用Hashset
或其他涉及分组的方法创建重复列表复制到单独的列表中,但是我对保留额外内容不感兴趣。
目前我在组合框中的内容是:
123
123
456
456
789
789
...等 麻烦的是,我正在收集模型(或类)中的数据:
List<ModelName>
ModelName<1>
{
string Name = Bob;
int Number = 123;
}
ModelName<2>
{
string Name = Jim;
int Number = 123;
}
ModelName<3>
{
string Name = Bob;
int Number = 456;
}
有没有办法用唯一的类填充列表:
ModelName<1>
{
Name;
Number;
}
ModelName<2>
{
Name;
}
ModelName<3>
{
Number;
}
只是过滤并处理任何双倍的?
答案 0 :(得分:10)
您可以使用LINQ Distinct
运算符删除集合中的重复项:
var listWithoutDuplicates = listWithDuplicates.Distinct().ToList();
如果要自定义元素的比较方式,您可以使用需要overload的IEqualityComparer<T>
。
在您的情况下,如果您要将“相等”定义为具有Location
属性的相同值,则可以使用此EqualityComparer
:
class EqualityComparer : IEqualityComparer<ClassName> {
public Boolean Equals(ClassName x, ClassName y) {
return Equals(x.Location, y.Location);
}
public Int32 GetHashCode(ClassName obj) {
return obj.Location.GetHashCode();
}
}
并按位置获取不同的项目:
var listWithoutDuplicates = listWithDuplicates.Distinct(new EqualityComparer).ToList();
答案 1 :(得分:3)
yourList.GroupBy(x => x.Location).Select(x => x.First());
答案 2 :(得分:1)
使用list.distinct()并填充列表
List<int> distinct = list.Distinct().ToList();