如何使用LINQ移除列表中相邻的重复元素
实现方案
你可以直接用LINQ内置的带索引参数的Where重载实现,逻辑非常简单:只保留第一个元素,以及和前一个元素值不同的元素即可。
核心代码
var idList = new List<int>(){100,100,200,200,300,300,100,100,200,200,300,300}; var result = idList.Where((value, index) => index == 0 || value != idList[index - 1]).ToList();
运行后得到的result就是你预期的[100,200,300,100,200,300]。
通用扩展方法实现
如果需要复用这个逻辑,可以封装成通用的LINQ扩展方法,支持任意类型的集合,还可自定义比较规则:
public static class EnumerableExtensions { public static IEnumerable<T> RemoveAdjacentDuplicates<T>(this IEnumerable<T> source, IEqualityComparer<T> comparer = null) { comparer ??= EqualityComparer<T>.Default; T previous = default; bool isFirstElement = true; foreach (var current in source) { if (isFirstElement || !comparer.Equals(current, previous)) { yield return current; previous = current; isFirstElement = false; } } } }
调用方式:
var result = idList.RemoveAdjacentDuplicates().ToList();
内容的提问来源于stack exchange,提问作者user3559195
相关产品推荐
相关产品推荐

