登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

秒大刀 博客

好好学习 天天向上

 
 
 

日志

 
 
 
 

C# 容器去重  

2009-05-07 21:48:44|  分类: C# |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

    容器去重是工程中经常用到的轮子。如果用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中的uniqueunique_copy很适合用来干这种勾当。

  评论这张
 
阅读(2698)| 评论(2)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018