使用LINQ删除列表中的重复内容?

bri*_*nch 2 .net c# linq

假设我有这个列表:

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做到这一点吗?

Lee*_*Lee 5

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)