;中国 COLD FUSION 用户组; WWW.CFWINDOW.COM 
您的位置 :首页 >> CF 技巧文章 >> 阅读文章内容 [ 关闭窗口 ]      

技巧文章内容 
    如何通过循环对数组进行删除?
文章作者 : weblu [ weblu@21cn.com ]          Web URL : http://
上载日期 : 2000-12-13


问题:: 你要通过循环删除一个数组中不符合条件的元素。

假定下面是你要进行处理的数组:

<cfset anArray = ArrayNew(1)>

<cfset anArray[1] = "www.microsoft.com">
<cfset anArray[2] = "www.wddx.org">
<cfset anArray[3] = "www.allaire.com">
<cfset anArray[4] = "www.programmers.org">
<cfset anArray[5] = "www.ibm.com">

你要做的是删除那些值为".com"域名的元素。你也许会这么做...
<cfloop from="1" to="#ArrayLen(anArray)#" index="i">
<cfif Right(anArray[i],3) is "com">
  <cfset ArrayDeleteAt(anArray,i)>
</cfif>
</cfloop>

如果你这么做了,你会发现程序出错。为什么呢?因为删除数组元素是根据数组长度来进行的。数组初始状态有5个值,所以你需要循环5次,当第一个元素被删除数组的长度变为了4,而当循环到第5次时第5个元素已经不存在了。
解决方案:
我喜欢这个解决方案,它通过改变问题而给出了答案:建立一个新数组,而不是对初始数组进行删除。

<cfset newArray = ArrayNew(1)>
<cfloop from="1" to="#ArrayLen(anArray)#" index="i">
<cfif Right(anArray[i],3) is not "com">
  <cfset ArrayAppend(newArray,i)>
</cfif>
</cfloop>







< 联系我们 --- 中国Cold Fusion用户组>

CFUG 国内(总部):Linkfoxo    上海:CFANS    北京:Cafe,Cyberkid,liwater    沈阳:Wangking
  
哈尔滨:Baiming    浙江:梅盛松    江西:陈末
  
CFUG (国际) Nagoya(名古屋):Codeguru    新加坡:YUZI    新西兰(Auckland):Richard CHEN
Copyright 2000-2001 www.cfwindow.com.All rights reserved

;中国 COLD FUSION 用户组; WWW.CFWINDOW.COM