加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

C#和JavaScript中数组去重概括

发布时间:2021-12-10 20:14:49 所属栏目:PHP教程 来源:互联网
导读:一.前言 去重在我们的开发过程中经常遇到,避免重复元素的添加,我们需要对获取到的集合(包括List、Array等)做相关的过滤操作。确保对象的唯一性,从而达到保证数据不冗余重复。由于自己是做.net方面的开发,所以就拿C#语言中常用的去重方式来学习。如果有
一.前言
 
去重在我们的开发过程中经常遇到,避免重复元素的添加,我们需要对获取到的集合(包括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的Add方法返回bool值,在添加数据时,如果发现集合中已经存在,则忽略这次操作,并返回false值。
 
而Hashtable和Dictionary碰到重复添加的情况会直接抛出错误。
 
三.c#采用for循环遍历对比去重
 
//一个集合内部的集合去重,采用循环比较
            var temp = "";
            List<int> lstall = new List<int> { 1, 2, 3, 4, 5, 5, 8, 8, 10 };
            for (int i = 0; i < lstall.Count - 1; i++)
            {
                for (int j = lstall.Count - 1; j > i; j--)
                {
                    if (lstall[i] == lstall[j])
                    {
                        lstall.RemoveAt(j);
                    }
                }
            }
 
            foreach (var item in lstall)
            {
                temp += item.ToString() + ",";
            }
            Console.WriteLine(temp);
            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对象时共享的。
 
Array.prototype.DropRepeat= function (){
  var oldArr=this;
  var oldLen=oldArr.length;
  var newArr=[oldArr[0]];
 
  if(!oldLen)
  {
   return this;
  }
 
  for(var i=1;i<oldLen;i++)
{
  newArr.indexOf(oldArr[i])<0?newArr.push(oldArr[i]):'';
}
return newArr;
 
};
 
 var testArr=['1','2','3','3','5'];
console.log(testArr.DropRepeat());
 
在chrome下测试的结果为:
 
 
 
5.2第二种方法就是直接函数实现:
 
function DropRepeat(arr){
              // 遍历arr,把元素分别放入tmp数组(不存在才放)
              var tmp = new Array();
              for(var i=0;i<arr.length;i++){
                  //该元素在tmp内部不存在才允许追加
                  if(tmp.indexOf(arr[i])==-1){
                      tmp.push(arr[i]);
                  }
          }
          return tmp;
      }
    var testArr=[1,2,2,3,4,4];
DropRepeat(testArr);
 
结果:
 
 
 
5.3第三种方法就是利用了一个键值的方法,反转键值以后,因为键值不能重复,所以就自动过滤掉了重复的元素。
 
function DropRepeat(arr)
{
    var reverseArr1=new Array();
    for(var item in arr){
          reverseArr1[arr[item]]=1;
  }
    var reverseArr2=new Array();
      for(var item in reverseArr1){
 
          reverseArr2.push(item);
  }
  return reverseArr2;
}
 
var testArr=[1,2,2,3,4,4,5];
DropRepeat(testArr);
 
测试结果:
 
 

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读