Есть ли функция, аналогичная ArrayFind из ColdFusion 9 в ColdFusion 8? - PullRequest
4 голосов
/ 02 декабря 2010

Я разговаривал с другим коллегой-программистом на работе, и мы используем ColdFusion.Он говорит мне, просто искать значение в массиве, я должен сделать весь цикл?Правда ли, что в ColdFusion 8 нет функции для простого поиска значения в массиве?

Ответы [ 3 ]

12 голосов
/ 02 декабря 2010

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) метод работает быстрее.

4 голосов
/ 02 декабря 2010

AFAIK нет документированной функции arrayFind в CF8. На cflib.org есть функция arrayFind , которая использует некоторые недокументированные функциональность Java См. Также Как найти значение в массиве? :

... Массивы ColdFusion являются реализация списков Java (java.util.List). Так что весь список Java методы доступны для массивов CF.

Так что для поиска в массиве все что вам нужно сделать, это добавить метод. Например, учитывая этот массив:

<cfset arry = listToArray("tom, dick, harry, phred")>

Вы можете сделать поиск следующим образом: <cfset findValue = arry.indexOf("harry")>

вернет 2 - значение индекса Гарри в массиве.

indexOf возвращает значение индекса элемента в массиве.

Примечание: имейте в виду, что в отличие от методов CF, метод java соответствует как значению, так и типу . Таким образом, поиск числа 1 (integer / double / etcetera) НЕ совпадает с поиском «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)

  • indexOf ("6") = 2
  • indexOf (val (6)) = -1

.. и поиск строки для "harry" дает результаты, отличные от "HaRry"

  • indexOf (Гарри) = 2
  • indexOf (HaRry) = -1

Так что, используя методы java, знайте, что вы получаете ... а что нет.

0 голосов
/ 15 декабря 2010

Будучи автором UDF, который вы нашли, я хотел бы отметить, что ArrayFind UDF использует базовые Java-основы CF. Я очень сомневаюсь, что Adobe изменит этот фундаментальный аспект CF. Также это полностью задокументировано в блоге Рупеша Кумара (одного из программистов Adobe по CF) по адресу: http://coldfused.blogspot.com/2007/01/extend-cf-native-objects-harnessing.html

С уважением, Larry

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...