删除对象序列中的连续重复项

时间:2015-10-20 15:51:11

标签: c# .net algorithm

假设我们有对象列表

List<int> list = new List<int>() { 1,1,1,2,3,3,3,2,2,2,1,1 };

获得以下结果列表的最优雅方法是什么?

{1,2,3,2,1}

2 个答案:

答案 0 :(得分:4)

我喜欢扩展方法的想法:

public static IEnumerable<T> RemoveContiguousDuplicates<T>(this IEnumerable<T> items) where T: IEquatable<T>
{
    bool init = false;
    T prev = default(T);

    foreach (T item in items)
    {
        if (!init)
            init = true;
        else if (prev.Equals(item))
            continue;

        prev = item;
        yield return item;
    }
}

然后,当然,要使用它:

var singles = list.RemoveContiguousDuplicates().ToList();

答案 1 :(得分:2)

试试这个:

List<int> newList = new List<int>();
foreach (var item in list.Where(c => newList.Count == 0 || newList.Last() != c))
{
    newList.Add(item); // 1,2,3,2,1 will add to newList
}