我在工作中与另一位程序员交谈,我们使用ColdFusion。他告诉我,如果要在数组中查找一个值,我必须进行整个循环?难道ColdFusion 8中没有简单查找数组值的函数吗?
我在工作中与另一位程序员交谈,我们使用ColdFusion。他告诉我,如果要在数组中查找一个值,我必须进行整个循环?难道ColdFusion 8中没有简单查找数组值的函数吗?
arrayFind()
在ColdFusion 8中不存在。但是,您不需要循环。有两种方法:
利用ColdFusion数组实现java.util.List接口的事实:
<cfset valueToFind = 1>
<cfset array = [1,2,3]>
<!--- add one because CF does 1 based vs. Java 0 based arrays --->
<cfset position = array.indexOf(valueToFind) + 1>
使用列表操作:<cfset valueToFind = 1>
<cfset array = [1,2,3]>
<cfset position = listFind(arrayToList(array), valueToFind)>
第一个(Java List)方法更快。
......ColdFusion数组是Java列表(java.util.List)的实现。因此,所有Java列表方法都适用于CF数组。
所以要搜索数组,你只需要添加适当的方法。例如,给定这个数组:
<cfset arry = listToArray("tom, dick, harry, phred")>
你可以像这样查找:
<cfset findValue = arry.indexOf("harry")>
将返回2 - harry在数组中的索引值。
indexOf返回项目在数组中的索引值。
NB:请注意,与CF方法不同,Java方法匹配值和类型。因此,搜索数字1(整数/双精度等)与搜索“1”(字符串)不同。如果您不知道确切的对象类型,结果可能会让您感到惊讶。
看这两个例子:
<cfscript>
// numeric searches are sensitive to type
arry = listToArray("2,4,6");
writeOutput('<br>indexOf("6") = '& arry.indexOf("6"));
writeOutput('<br>indexOf( val(6) )= '& arry.indexOf(val(6)));
// string searches are case sensitive
arry = listToArray("tom,dick,harry,phred");
writeOutput("<br>indexOf(harry) = "& arry.indexOf("harry"));
writeOutput("<br>indexOf(HaRry) = "& arry.indexOf("HaRry"));
</cfscript>
搜索"6"
得到的结果与val(6)
不同。
...而对于"harry"
的字符串搜索,与"HaRry"
得到的结果也不同。
因此,在使用Java方法时,请了解您正在获得什么...以及您没有获得什么。