从列表中删除重复值的最快方法是什么?假设List<long> longs = new List<long> { 1, 2, 3, 4, 3, 2, 5 };
,所以我对使用lambda删除重复并返回:{1, 2, 3, 4, 5}
很感兴趣。你有什么建议吗?
发布于 2012-11-05 20:02:13
您可以对包含更复杂类型的枚举使用此扩展方法:
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)));
}
发布于 2012-05-17 17:14:09
这里有Distinct()方法。它应该是有效的。
List<long> longs = new List<long> { 1, 2, 3, 4, 3, 2, 5 };
var distinctList = longs.Distinct().ToList();
发布于 2012-05-27 16:55:47
如果你想保持原来的列表,而不是创建一个新的列表,你可以做一些类似于Distinct()
扩展方法在内部做的事情,比如使用HashSet来检查唯一性:
HashSet<long> set = new HashSet<long>(longs.Count);
longs.RemoveAll(x => !set.Add(x));
List类提供了这个方便的RemoveAll(predicate)
方法,可以删除所有不满足谓词指定条件的元素。谓词是一个委托,它接受列表元素类型的参数并返回一个布尔值。只有当HashSet的Add()
方法还不包含该项时,它才会返回true。因此,通过从列表中删除任何无法添加到集合中的项,您可以有效地删除所有重复项。
https://stackoverflow.com/questions/10632776
复制相似问题