文章作者 : 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>
|