首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用lambda从list<>中删除重复值的最快方法

使用lambda从list<>中删除重复值的最快方法
EN

Stack Overflow用户
提问于 2012-05-17 17:12:20
回答 6查看 159.2K关注 0票数 73

从列表中删除重复值的最快方法是什么?假设List<long> longs = new List<long> { 1, 2, 3, 4, 3, 2, 5 };,所以我对使用lambda删除重复并返回:{1, 2, 3, 4, 5}很感兴趣。你有什么建议吗?

EN

回答 6

Stack Overflow用户

发布于 2012-11-05 20:02:13

您可以对包含更复杂类型的枚举使用此扩展方法:

代码语言:javascript
复制
IEnumerable<Foo> distinctList = sourceList.DistinctBy(x => x.FooName);

public static IEnumerable<TSource> DistinctBy<TSource, TKey>(
    this IEnumerable<TSource> source,
    Func<TSource, TKey> keySelector)
{
    var knownKeys = new HashSet<TKey>();
    return source.Where(element => knownKeys.Add(keySelector(element)));
}
票数 84
EN

Stack Overflow用户

发布于 2012-05-17 17:14:09

这里有Distinct()方法。它应该是有效的。

代码语言:javascript
复制
List<long> longs = new List<long> { 1, 2, 3, 4, 3, 2, 5 };
var distinctList = longs.Distinct().ToList();
票数 7
EN

Stack Overflow用户

发布于 2012-05-27 16:55:47

如果你想保持原来的列表,而不是创建一个新的列表,你可以做一些类似于Distinct()扩展方法在内部做的事情,比如使用HashSet来检查唯一性:

代码语言:javascript
复制
HashSet<long> set = new HashSet<long>(longs.Count);
longs.RemoveAll(x => !set.Add(x));

List类提供了这个方便的RemoveAll(predicate)方法,可以删除所有不满足谓词指定条件的元素。谓词是一个委托,它接受列表元素类型的参数并返回一个布尔值。只有当HashSet的Add()方法还不包含该项时,它才会返回true。因此,通过从列表中删除任何无法添加到集合中的项,您可以有效地删除所有重复项。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10632776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档