歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C#和JavaScript中數組去重總結

C#和JavaScript中數組去重總結

日期:2017/3/1 9:27:03   编辑:Linux編程

一.前言

去重在我們的開發過程中經常遇到,避免重復元素的添加,我們需要對獲取到的集合(包括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);

測試結果:

本人菜鳥,希望各位大牛給出指導,不當之處虛心接受學習!謝謝!

JavaScript高級程序設計(第3版)高清完整PDF中文+英文+源碼 http://www.linuxidc.com/Linux/2014-09/107426.htm

如何使用JavaScript書寫遞歸函數 http://www.linuxidc.com/Linux/2015-01/112000.htm

JavaScript核心概念及實踐 高清PDF掃描版 (邱俊濤) http://www.linuxidc.com/Linux/2014-10/108083.htm

理解JavaScript中的事件流 http://www.linuxidc.com/Linux/2014-10/108104.htm

Copyright © Linux教程網 All Rights Reserved