文档章节

c#和Javascript中去重总结

CoderPeng
 CoderPeng
发布于 2015/11/17 11:31
字数 926
阅读 1
收藏 0

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

一.前言

      去重在我们的开发过程中经常遇到,避免重复元素的添加,我们需要对获取到的集合(包括List、Array等)

做相关的过滤操作。确保对象的唯一性,从而达到保证数据不冗余重复。由于自己是做.net方面的开发,所以就拿C#

语言中常用的去重方式来学习。如果有其他更好的方式,希望各位大牛指出来,自己也学习学习,在此十分感谢!

二.C#一般性去重

static void Main(string[] args)
        {

            //1.集合的定义
            List<int> listArr = new List<int> { 1, 2, 3, 5, 8, 10 };
            List<int> listArrCompare = new List<int> { 2, 3, 4, 8, };
            var num1 = "";
            var num2 = "";
            var num3 = "";

            //2.集合的操作
            listArr.AddRange(listArrCompare);   //将listArr和listArrCompare合并

            List<int> resultList = listArr.Union(listArrCompare).ToList<int>();          //剔除重复项 
            List<int> ResultSameList = listArr.Concat(listArrCompare).ToList<int>();        //保留重复项
            foreach (var item1 in listArr)
            {
                num1 = num1 + "," + item1.ToString();

            }
            foreach (var item2 in resultList)
            {
                num2 = num2 + "," + item2.ToString();

            }
            foreach (var item3 in ResultSameList)
            {

                num3 = num3 + "," + item3.ToString();

            }
            Console.WriteLine(num1);
            Console.WriteLine(num2);
            Console.WriteLine(num3);
            Console.ReadKey();

        }

结果:

 

c#中还有很多去重的方案,在这里说到了最基础的,对于Dictionary、HashTable、HashSet等都可以利用到去重的方法。

HashSet<T>的Add方法返回bool值,在添加数据时,如果发现集合中已经存在,则忽略这次操作,并返回false值。

而Hashtable和Dictionary<TKey,TValue>碰到重复添加的情况会直接抛出错误。

三.c#采用for循环遍历对比去重

 1           //一个集合内部的集合去重,采用循环比较
 2             var temp = "";
 3             List<int> lstall = new List<int> { 1, 2, 3, 4, 5, 5, 8, 8, 10 };
 4             for (int i = 0; i < lstall.Count - 1; i++)
 5             {
 6                 for (int j = lstall.Count - 1; j > i; j--)
 7                 {
 8                     if (lstall[i] == lstall[j])
 9                     {
10                         lstall.RemoveAt(j);
11                     }
12                 }
13             }
14 
15             foreach (var item in lstall)
16             {
17                 temp += item.ToString() + ",";
18             }
19             Console.WriteLine(temp);
20             Console.ReadKey();

结果:

 

四.Distinct去重

//利用distinct去重
            List<String> strSameList = new List<String>();
            strSameList.Add("武汉");
            strSameList.Add("武汉");
            strSameList.Add("上海");
            strSameList.Add("上海");
            strSameList.Add("南京");
            strSameList.Add("南京");
            strSameList.Add("帝都");
            strSameList.Add("石家庄");
            String myList = String.Empty;
            IEnumerable<String> distinctList = strSameList.Distinct();
            foreach (String str in distinctList)
            {
                myList += str + " ,";
            }
            Console.WriteLine(myList);
            Console.ReadKey();

结果:

 

五.Javascript中去重

Javascript中我们经常遇到数组去重的情况,那我们一般采取什么样的方式了?

通过学习以及网上一些资料,自己将一些方法总结如下:

5.1第一种方法:

通过定义Array对象原型的方法,那么数组都可以调用该方法对本身重复的元素Drop。

因Array原型上的方法对于不同的Array对象时共享的。

 1 Array.prototype.DropRepeat= function (){
 2    var oldArr=this;
 3    var oldLen=oldArr.length;
 4    var newArr=[oldArr[0]];
 5    
 6   if(!oldLen)
 7   {
 8     return this;
 9   }
10  
11   for(var i=1;i<oldLen;i++)
12 {
13    newArr.indexOf(oldArr[i])<0?newArr.push(oldArr[i]):'';
14 }  
15 return newArr;
16 
17 };
18 
19  var testArr=['1','2','3','3','5'];
20 console.log(testArr.DropRepeat());

在chrome下测试的结果为:

 

5.2第二种方法就是直接函数实现:

 1       function DropRepeat(arr){
 2               // 遍历arr,把元素分别放入tmp数组(不存在才放)
 3               var tmp = new Array();
 4               for(var i=0;i<arr.length;i++){
 5                   //该元素在tmp内部不存在才允许追加
 6                   if(tmp.indexOf(arr[i])==-1){
 7                        tmp.push(arr[i]);
 8                    }
 9           }
10            return tmp;
11       }
12     var testArr=[1,2,2,3,4,4]; 
13 DropRepeat(testArr);

结果:

5.3第三种方法就是利用了一个键值的方法,反转键值以后,因为键值不能重复,所以就自动过滤掉了重复的元素。

 1 function DropRepeat(arr)
 2 {
 3     var reverseArr1=new Array();
 4     for(var item in arr){
 5           reverseArr1[arr[item]]=1;
 6   }
 7     var reverseArr2=new Array();
 8       for(var item in reverseArr1){
 9 
10           reverseArr2.push(item);
11   }
12   return reverseArr2;
13 }
14 
15 var testArr=[1,2,2,3,4,4,5];
16 DropRepeat(testArr);

测试结果:

 

本人菜鸟,希望各位大牛给出指导,不当之处虚心接受学习!谢谢!

© 著作权归作者所有

CoderPeng
粉丝 0
博文 140
码字总数 78649
作品 0
青浦
程序员
私信 提问
WPF CefSharp 爬虫

1、实际需求 EMS邮件的自动分拣,要分拣首先需要获取邮件的面单号和邮寄地址,现在我们的快递一般都有纸质面单的,如果是直接使用图像识别技术从纸质面单中获取信息,这个开发的成本和实时性...

EllisQian
11/17
0
0
用函数式编程对JavaScript进行断舍离

译者按: 当从业20的JavaScript老司机学会函数式编程时,他扔掉了90%的特性,也不用面向对象了,最后发现了真爱啊!!! 原文: How I rediscovered my love for JavaScript after throwing 90...

Fundebug
2017/09/13
33
0
asp.net2.0学习历程 菜鸟到中级程序员的飞跃【月儿原创】

asp.net2.0学习历程 菜鸟到中级程序员的飞跃 --30本好书点评 作者:清清月儿 主页:http://blog.csdn.net/21aspnet/ 时间:2007.5.16 学历历程 如果你是一个菜鸟或者自认为初学者那么本文非常...

晨曦之光
2012/03/09
179
0
JavaScript初学者应该了解的二三事!(翻译)

原文链接:http://www.codeproject.com/Articles/333596/What-devs-should-know-about-Javascript 作为javascript初学者,你应该了解这些 (以下js表示javascript的简称) 大家都知道在开发服务...

junwong
2012/02/23
1K
6
Unity3D中JavaScript与C#对比

第一节 在使用unity3d进行游戏开发或者互动项目制作的时候,有3种编辑语言可供使用,不过用的最多的应该是javascript和c#两种语言,相信很多朋友特别是新手都会很纠结于到底该用二者种的哪一...

dangnianmingyue_gg
2016/03/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

mars-config 动态配置管理

mars-config 码云地址:https://gitee.com/fashionbrot/mars-config 介绍 spring mvc 、springboot 动态配置系统。http 轮训方式 更新 动态配置 软件架构 软件架构说明 后端使用技术 :sprin...

fashionbrot
17分钟前
9
0
女朋友玩吃鸡手游被开挂老哥骗炮,我见义勇为将骗子绳之以法

大家好,我是乔哥。 晚上10点以后下班后我回到自如出租房里面,开始处理公众号粉丝发来的消息,一条一条处理,突然看到了这么几条消息,吸引了我的眼球: 然后我就和这位女粉丝小红(化名)聊...

gzc426
23分钟前
3
0
两款软件

fadetop保护眼睛软件 Snipaste截图软件

伟大源于勇敢的开始
49分钟前
6
0
06.全局锁和表锁

根据加锁的范围,MySQL里面的锁大致可以分成全局锁、表级锁和行锁三类。 全局锁 全局锁就是对整个数据库实例加锁。MySQL提供了一个加全局读锁的方法,命令是flush tables with read lock(FTW...

scgaopan
今天
7
0
图解安装CentOS8

最近正式发布了CentOS8!迫不及待地准备下载了CentOS8镜像,准备体验下,工作繁忙无暇理会。 今天抽空安装体验下~ 可从CentOS官网下载:https://centos.org/download/ 为了快速可以选择从国...

技术训练营
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部