从列表中筛选重复项以填充ComboBox

时间:2014-03-10 06:59:07

标签: c# list duplicates

我一直在寻找一种方法来过滤掉列表中的重复项以填充表单,但到目前为止,我发现只需使用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;
}

只是过滤并处理任何双倍的?

3 个答案:

答案 0 :(得分:10)

您可以使用LINQ Distinct运算符删除集合中的重复项:

var listWithoutDuplicates = listWithDuplicates.Distinct().ToList();

如果要自定义元素的比较方式,您可以使用需要overloadIEqualityComparer<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();