清除字符串数组中,重复元素

一、JS实现(收藏)

None.gif < script language = " JavaScript " >
None.gif
<!--
None.gif
var  arrData = new  Array();
None.gif
for ( var  i = 0 ; i < 1000 ; i ++ )
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gifarrData[arrData.length] 
= String.fromCharCode(Math.floor(Math.random()*26)+97);
ExpandedBlockEnd.gif}

None.gif
// document.write(arrData+"<br/>"); 
None.gif

None.gif
// 方法一,普通遍历
None.gif
function  myArray_Unique(myArray)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif
//var myArray=new Array("a","a","c","a","c","d","e","f","f","g","h","g","h","k");
InBlock.gif
var haha=myArray;
InBlock.gif
for(var i=0;i<myArray.length;i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gif
for(var j=0;j<myArray.length;j++)
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.giftemp
=myArray[i];
InBlock.gif
if((i+j+1)<myArray.length&&temp==myArray[i+j+1]) //如果当前元素与后一个元素相等
InBlock.gif
haha.splice(i+j+1,1); //然后就移除下一个元素 
ExpandedSubBlockEnd.gif
}

ExpandedSubBlockEnd.gif}

InBlock.gif
return haha;
ExpandedBlockEnd.gif}
 
None.gif
None.gif
// 方法二
None.gif
function  getUnique(someArray)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.giftempArray
=someArray.slice(0);//复制数组到临时数组
InBlock.gif
for(var i=0;i<tempArray.length;i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gif
for(var j=i+1;j<tempArray.length;)
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gif
if(tempArray[j]==tempArray[i])
InBlock.gif
//后面的元素若和待比较的相同,则删除并计数;
InBlock.gif//
删除后,后面的元素会自动提前,所以指针j不移动
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.giftempArray.splice(j,
1);
ExpandedSubBlockEnd.gif}

InBlock.gif
else
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gifj
++;
ExpandedSubBlockEnd.gif}

InBlock.gif
//不同,则指针移动
ExpandedSubBlockEnd.gif
}

ExpandedSubBlockEnd.gif}

InBlock.gif
return tempArray;
ExpandedBlockEnd.gif}
 
None.gif
None.gif
// 方法三 正则表达式 -- 适用于字符型数组
None.gif
function  getUnique2(A)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif
var str = "\x0f"+ A.join("\x0f");
InBlock.gif
while(/(\w+)[^\1]*\1/.test(str))
InBlock.gifstr 
= str.replace("\x0f"+ RegExp.$1"");
InBlock.gif
return str.substr(1).split("\x0f");
ExpandedBlockEnd.gif}
 
None.gif
None.gif
// 方法四 关联结构
None.gif
Array.prototype.unique  =  array_unique;
None.gif
function  array_unique()
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif
var o = new Object();
InBlock.gif
for (var i=0,j=0; i<this.length; i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gif
if (typeof o[this[i]] == 'undefined')
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gifo[
this[i]] = j++;
ExpandedSubBlockEnd.gif}

ExpandedSubBlockEnd.gif}

InBlock.gif
this.length = 0;
InBlock.gif
for (var key in o)
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gif
this[o[key]] = key;
ExpandedSubBlockEnd.gif}

InBlock.gif
return this;
ExpandedBlockEnd.gif}
 
None.gif
None.gif
var  d  =   new  Date().getTime();
None.gifdocument.write(myArray_Unique(arrData));
None.gif
=   new  Date().getTime() - d;
None.gifdocument.write(
" <br/>2000元素 方法一算法计耗时  " +  d  + "  毫秒!<br/><br/> " );  // 大约370ms~390ms左右 
None.gif

None.gif
var  d  =   new  Date().getTime();
None.gifdocument.write(getUnique(arrData));
None.gif
=   new  Date().getTime() - d;
None.gifdocument.write(
" <br/>2000元素 方法二算法计耗时  " +  d  + "  毫秒!<br/><br/> " );  // 大约360ms~380ms左右 
None.gif

None.gif
var  d  =   new  Date().getTime();
None.gifdocument.write(getUnique2(arrData));
None.gif
=   new  Date().getTime() - d;
None.gifdocument.write(
" <br/>2000元素 正则表达式 方法三算法计耗时  " +  d  + "  毫秒!<br/><br/> " ); // 大约80ms左右 
None.gif

None.gif
var  d  =   new  Date().getTime();
None.gifdocument.write(arrData.unique());
None.gif
=   new  Date().getTime() - d;
None.gifdocument.write(
" <br/>2000元素 关联结构 方法四算法计耗时  " +  d  + "  毫秒!<br /><br /> " ); // 大约0ms~10ms左右 
None.gif

None.gif
// -->
None.gif
</ script >  
None.gif
None.gif

 

二、巧用.net的NameValueCollection实现(原创)

 

ExpandedBlockStart.gif ContractedBlock.gif /**/ /// <summary>
InBlock.gif
/// 删除字符串组中相同元素
InBlock.gif
/// </summary>
InBlock.gif
/// <param name="strArr"></param>
ExpandedBlockEnd.gif
/// <returns></returns>

None.gif public   static   string [] GetUnique( string [] strArr)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gifSystem.Collections.Specialized.NameValueCollection name 
= new System.Collections.Specialized.NameValueCollection(); 
InBlock.gif
InBlock.gif
foreach (string s in strArr)
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gifname[s] 
= s;
ExpandedSubBlockEnd.gif}

InBlock.gif
return name.AllKeys;
ExpandedBlockEnd.gif}
 
None.gif

转载于:https://www.cnblogs.com/CSharp/archive/2006/08/15/477406.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值