linq - 什么是创建独特的数据结构更好的方法:HashSet或Linq的Distinct()?

标签 linq performance distinct hashset

我想知道是否可以就哪种方法是创建一组独特元素的更好方法达成共识:C# HashSet还是使用Lint函数的IEnumerable's .Distinct()

假设我正在使用DataReader遍历数据库的查询结果,而我的选项是使用List<SomeObject>选项将我构造的对象添加到HashSet<SomeObject>List中,我最终不得不做类似的事情:
myList = myList.Distinct().ToList<SomeObject>();
使用HashSet,我的理解是,假设您已覆盖SomeObject中的GetHashCode()Equals()方法,则向其中添加元素将自己完成非重复操作。我主要关注这些选项的风险和性能方面。

谢谢。

最佳答案

“更好”是一个棘手的词-对不同的人可能意味着很多不同的东西。

为了提高可读性,我会选择Distinct(),因为我个人认为这更容易理解。

为了提高性能,我怀疑手工制作的HashSet实现可能会稍微慢一些-但我怀疑它会大不相同,因为Distinct的内部实现无疑会使用某种形式的哈希。

对于我认为是“最佳”的实现...我认为您应该使用Distinct,但以某种方式将其推到数据库层-即在填充DataReader之前更改基础数据库SELECT。

关于linq - 什么是创建独特的数据结构更好的方法:HashSet或Linq的Distinct()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6298679/

相关文章:

sql - 如何根据 Case When 进行不同计数?

c# - 如何传入将用作数据表中行的过滤器的 lambda?

c# - 哪些语言支持没有样板代码的返回值缓存?

python - 有没有一种更省时有效的方法来填充字典

java - 为什么对 UUID.randomUUID() 的初始调用很慢?

mysql - MySQL 中的 SQL 不同

c# - 列表中的 LINQ Concat 子列表

c# - 如何为 EntitySet 构造 Where 子句

c# - Entity Framework /LINQ : Left join defaultifempty fails

mysql - 选择唯一值和关联的时间戳,而不具有使事物唯一的时间戳