假设我有这个列表:
int[] list = { 1, 2, 3, 3, 1 };
Run Code Online (Sandbox Code Playgroud)
我想要的是删除紧跟相同数字的重复项.所以在这种情况下我想删除3,但不是1.
因此,新清单应为: {1, 2, 3, 1}
另一个例子是这个列表:{2, 7, 7, 7, 2, 6, 4}将成为{2, 7, 2, 6, 4}.
我可以用LINQ做到这一点吗?
Aggregate如果你想使用现有的LINQ方法,你可以使用,但这种方法会失去懒惰.您可以编写自己的扩展方法:
public static IEnumerable<T> RemoveConsecutiveDuplicates<T>(this IEnumerable<T> source, IEqualityComparer<T> comp = null)
{
comp = comp ?? EqualityComparer<T>.Default;
using (var e = source.GetEnumerator())
{
if (e.MoveNext())
{
T last = e.Current;
yield return e.Current;
while (e.MoveNext())
{
if (!comp.Equals(e.Current, last))
{
yield return e.Current;
last = e.Current;
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)