C# List Distinct用法

class ListDistinctDemo
{
static void Main(string[] args)
{
List personList = new List(){
new Person(3),//重复数据
new Person(3),
new Person(2),
new Person(1)
};

//使用匿名方法
List delegateList = personList.Distinct(new Compare(
delegate(Person x, Person y)
{
if (null == x || null == y) return false;
return x.ID == y.ID;
})).ToList();

delegateList.ForEach(s => Console.WriteLine(s.ID));

//使用 Lambda 表达式
List lambdaList = personList.Distinct(new Compare(
(x, y) => (null != x && null != y) && (x.ID == y.ID))).ToList();

lambdaList.ForEach(s => Console.WriteLine(s.ID));

//排序
personList.Sort((x, y) => x.ID.CompareTo(y.ID));
personList.ForEach(s => Console.WriteLine(s.ID));

}
}
public class Person
{
public int ID { get; set; }
public string Name { get; set; }

public Person(int id)

{
this.ID = id;
}
}

public delegate bool EqualsComparer(T x, T y);

public class Compare : IEqualityComparer
{
private EqualsComparer _equalsComparer;

public Compare(EqualsComparer<T> equalsComparer)
{
    this._equalsComparer = equalsComparer;
}

public bool Equals(T x, T y)
{
     if (null != this._equalsComparer)
         return this._equalsComparer(x, y);
     else
        return false;

}

public int GetHashCode(T obj)
{
    return obj.ToString().GetHashCode();
}

}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C#中,`Distinct`方法用于从集合中去除重复的元素。默认情况下,`Distinct`方法使用元素的默认相等比较器来确定元素是否相等。然而,有时候我们可能需要使用自定义的比较器来进行元素比较。 引用中展示了一个自定义的扩展方法`Distinct`,该方法接受一个`keySelector`委托作为参数来指定元素的比较键。该方法遍历集合中的元素,使用一个`HashSet`来记录已经出现过的键,如果当前元素的键不存在于`HashSet`中,则将其添加到结果中。 引用展示了如何使用`Distinct`方法来去除集合中的重复元素。在这个例子中,集合`list`通过指定属性`Age`和`Name`进行比较,并将结果转换为`List`类型。 引用中提到了另一种通过重写`Equals`和`GetHashCode`方法来实现元素比较的方式。这种方式需要为每个类都实现一个比较器,不太通用。然而,可以通过使用委托来实现一个通用的解决方案。该解决方案定义了一个`DynamicEqualityComparer`类,该类实现了`IEqualityComparer`接口,接受一个自定义的比较委托作为参数。在此基础上,`Distinct`方法可以使用一个通用的比较器来去除重复元素。 综上所述,C#中的`Distinct`方法可以通过默认的相等比较器或自定义的比较器来去除集合中的重复元素。您可以使用扩展方法来实现自定义的比较逻辑,或者重写`Equals`和`GetHashCode`方法来实现类特定的比较器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值