C# 容器去重

容器去重是工程中经常用到的轮子。如果用C#3.0的话,直接用 System.Linq.Enumerable中的 Distinct方法即可搞定。该方法底层是通过构造一个DistinctIterator的延迟迭代器来实现输出时的伪装去重。

    如果是C#2.0中则需要自己手工去做。

    算法的基本思想是:从后向前扫描,每次确认已经扫描过的区域内是否有重复元素,如果发现重复元素则删除后面的元素。该算法可以避免从前向后扫描即时删除时维护下标的复杂性,当然将要删除的元素下标记到RemoveList是另外一种解法。

  public static Unique<T>(List<T> list)
  {
      if(list == null)
          return;
      for(int i = list.Count - 1; i>= 0; i--)
      {
          for(int j = list.Count - 1; j > i; j--)
          {
              if(list[i] == null && list[j] == null
                  || list[i].Equals(list[j]))
              {
                  list.RemoveAt(j);
              }
          }
      }
  }  

     当然在C++中也是有现成的轮子可以用的,STL中的unique和unique_copy很适合用来干这种勾当。

你可能感兴趣的:(C#)