c#和Javascript中去重总结

一.前言

去重在我们的开发过程中经常遇到,避免重复元素的添加,我们需要对获取到的集合(包括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);

测试结果:

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

时间: 2024-10-26 20:53:56

c#和Javascript中去重总结的相关文章

Javascript中的数组去重-indexof方法

在Javascript中,有时我们会用到数组去重.我在这里给大家介绍一下本人认为最简单实用的一种方法-indexOf()去重. 1 var arr = [1,1,1,2,2,2,3,3,4,5,6,2,1]; 2 var arr2 = []; 3 for(var i = 0;i < arr.length;i++){ 4 if(arr2.indexOf(arr[i]) == -1){ 5 arr2.push(arr[i]) 6 } 7 } 8 console.log(arr2) //[1,2,3,

javaScript数组去重方法

在JAvascript平时项目开发中经常会用到数组去重的操作.这时候就要用到JS数组去重的方法了. demo1: 第一种:JS数组去重操作方法是利用遍历原数组,利用数组的indexOf()方法来来判断新数组b中是否有原数组a中的元素,如果没有的话则在b数组的后面追加上a[i],如果有的话就不执行任何操作,最后可以达到数组去重的操作. 这种方法应该是平时开发中最常用的JS数组去重的方法了,简单又实用. demo2: 第二种去重的方法比较巧妙,是定义一个空对象和一个空数组,在遍历原数组的时候来用原数

JavaScript 数组去重

JavaScript 数组去重 Why underscore (觉得这部分眼熟的可以直接跳到下一段了...) 最近开始看 underscore.js 源码,并将 underscore.js 源码解读 放在了我的 2016 计划中. 阅读一些著名框架类库的源码,就好像和一个个大师对话,你会学到很多.为什么是 underscore?最主要的原因是 underscore 简短精悍(约 1.5k 行),封装了 100 多个有用的方法,耦合度低,非常适合逐个方法阅读,适合楼主这样的 JavaScript

【前端】javascript中10常用的个小技巧总结

javascript中10常用的个小技巧总结 本文转自:http://www.cnblogs.com/libin-1/p/6756393.html 1. new Set() 可能有人知道ES6中提供了新的数据结构 Set,但是能够灵活运用的人或许不多.利用Set数据结构我们能够轻松的去重一个数组,比如: let arr = [1, 2, 2, 3]; let set = new Set(arr); let newArr = Array.from(set); // Array.from方法可以将

关于JavaScript中的事件代理

今天面试某家公司Web前端开发岗位,前面的问题回答的都还算凑活,并且又问了一下昨天面试时做的一道数组去重问题的解题思路(关于数组去重问题,可以观赏我前几天写的:http://www.cnblogs.com/craftsman-gao/p/4766223.html.幸好前几天专门看过这个问题,答题时才能轻松应对啊),因为这些以前都有过研究,所以回答起来并没有太大困难.然而,最后面试官又出了一道代码题让我涨姿势了.题目本身很简单:一个ul中有一千个li,如何给这一千个li绑定一个鼠标点击事件,当鼠标

对JavaScript中this的理解

JavaScript中的this其实没传说中的那么难,也没那么乱. 我们来分析下,this主要是跟它的执行环境有关. 而通常情况下,this都是放在函数体中或可执行的JS代码中(函数体除外). 至于JS可执行代码中的this,用的不多,所以本文举例较少. 至于函数体中的this,我们只要弄清楚this所处的函数体是谁在调用,不就知道this是谁了吗? 注意:此文中的函数调用,是指该函数作为某对象的一个属性方法被执行,而不是单纯的在某个对象的作用域中执行就是调用 -----------------

javascript中关于数组的一些鄙视题

一.判断一个数组中是否有相同的元素 /* * 判断数组中是否有相同的元素的代码 */ // 方案一 function isRepeat1(arrs) { if(arrs.length > 0) { var s = arrs.join(","); for(var i = 0,ilen = arrs.length; i < ilen; i+=1) { if(s.replace(arrs[i],"").indexOf(arrs[i])>-1) { ret

详解Javascript中的Array对象

基础介绍 创建数组 和Object对象一样,创建Array也有2种方式:构造函数.字面量法. 构造函数创建 使用构造函数的方式可以通过new关键字来声明,如下所示: 12 var arr = new Array();console.log(arr);//[] 当然也可以不通过new关键字来声明: 12 var arr = Array();console.log(arr); //[] 如果知道数组元素的个数,也可以直接传入数字表示元素个数: 12 var arr2 = new Array(5);c

Javascript数组去重的几种方法

Javascript数组去重的几种方法 新建空数组,通过for...of(ES6)循环遍历,通过indexOf判断元素是否在新数组中存在,将不存在的(indexOf(n)==-1)元素push到新数组中: let arr = [1,1,2,2,3,6,3,77,88,5,98,9,7,2,7,5,3,4,2]; function removeDup_indexOf(originalArr){ let newArr = []; for(n of originalArr){ if(newArr.in