• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

使用C#去掉10万级数组中重复的数据

原作者: [db:作者] 来自: [db:来源] 收藏 邀请


最近做了个小程序,其中有个功能是去掉数组中的重复数据,开始没有考虑数组数量的问题,使用了一般的算法。但后面别人和我说5W条数据等了10分钟还没有成功,汗。。。

(刚才写这篇文章,浏览器突然自动刷新了,郁闷呀,写的一点都没有了,都没自动保存草稿,纠结)

后面用了别一种算法,基本上20S内可以完成了。

测试数据1万条

第一种算法(4分钟)

 

/// <summary>
        /// List泛型去重
        /// </summary>
        /// <param name="list">由一维数组组成的泛型</param>
        /// <param name="ItemID">要去除重复的项</param>
         private void RemoveRepeaterUrl(ref List<string[]> list,int ItemID)
         {
             for (int i = 0; i < list.Count; i++)
             {
                 for (int j = (i + 1); j < list.Count; j++)
                 {
                     if (list[j][ItemID] == list[i][ItemID])
                     {
                         list.RemoveAt(j);//去除相同的项
                         i = 0;//从新开始去重,如果数组内有大量重复的项,仅一次去重不能解决问题。这样的用法会使效率慢1/3
                         j = 0;
                     }
                 }
             }
         }


第二种算法(4S)

        //去除重复的数据, 返回list

        //利用类库中的hashtable类的containsKeys方法判断hashtable中是否存在这个数据,要是不存在就

        //把数据添加到新的List中,最后清空hashtable

        public List<string> getUnque(List<string> list)
        {
            List<string> list1 = new List<string>();
            Hashtable hash = new Hashtable();
            foreach (string stu in list)
            {
                string[] kk1 = stu.Split(new string[] { "--" }, StringSplitOptions.RemoveEmptyEntries);
                string comword = kk1.Length==3 ? kk1[2]:"";
                if (!hash.ContainsKey(comword))
                {
                    hash.Add(comword, comword);
                    list1.Add(stu);
                }
            }
            hash.Clear();
            hash = null;
            return list1;
        }


 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#中base的作用发布时间:2022-07-13
下一篇:
c#时间函数发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap