Статьи

Введение в структуры данных в ColdFusion Часть III — Списки

В двух предыдущих статьях мы обсуждали некоторые из более сложных структур данных в ColdFusion. Хотя массивы и структуры чрезвычайно полезны для очень специфических задач, вы, вероятно, будете чаще использовать списки. К счастью, списки чрезвычайно просты в управлении ColdFusion.

Для всех вас, разработчиков Java, C ++ и Visual Basic, я дам вам знать, что вы будете крайне ревновать к ColdFusion после прочтения этой статьи. ColdFusion позволяет очень легко манипулировать списками с помощью встроенных функций. И с небольшим творческим потенциалом, хороший разработчик ColdFusion может найти несколько миллионов способов использования списка.

Что такое список?

Сначала давайте определим, что такое список в терминах ColdFusion. Список — это просто строка. Единственная разница между строкой и списком состоит в том, что список ограничен определенным символом или набором символов. Вы можете использовать любую строку в качестве списка, и любым списком можно манипулировать, как любой строкой. Например, a,b,c,d,e,f,g Или вы можете использовать a/b/c/d/e/f/g Разделителем по умолчанию для списка ColdFusion является запятая. Также имейте a/b/ca / b / c<cfset listLength = ListLen("a,b,c,d,e")> ColdFusion не обрезает пустое пространство от элементов списка. Если список содержит пробелы, вы можете использовать функцию Trim для элементов.

Списки в действии

Итак, теперь, когда мы знаем, что ColdFusion определяет как список, мы начнем использовать списки. Прежде всего, давайте попробуем получить длину списка.

 ListLen
  listLengthlistLength  Это довольно просто, но вот проблема для вас: каково значение <cfset listLength = ListLen("a,b,,c,,d,e")> 

 <cfloop list="a,b,c,d,e" index="i"> 
   <cfoutput> #i# <br /></cfoutput>
</cfloop>

Если вы догадались 5, вы правы. Причина в том, что ColdFusion игнорирует пустые элементы списка. Теперь предположим, что мы хотим отобразить каждый элемент в списке. Это очень легко:

 #

Этот код отображает каждый элемент списка в отдельной строке. Теперь, если у вас есть список, хранящийся в переменной, не забудьте поставить знаки решетки ( <cfset list = "a,b,c,d">
<!--- this works fine --->
<cfloop list="#list#" index="i">
   <cfoutput> #i# <br /></cfoutput>
</cfloop>

<!--- this outputs "list" --->
<cfloop list="list" index="i">
   <cfoutput> #i# <br /></cfoutput>
</cfloop>
В противном случае это не будет работать правильно.

 ListLen

Обязательно закручивайте имя переменной в знаках решетки при зацикливании списка.

Функции списка

Есть также несколько функций списка, которые мы должны очень кратко охватить, прежде чем перейти к более крупным и лучшим вещам. Мы говорили о ListLen <cfset words = ListLen("The quick brown fox jumps over the lazy dog.", " ")> Таким образом, вы можете узнать, сколько слов в предложении, выполнив это:

 words

Обратите внимание, что второй параметр указывает, что строка, переданная в первом параметре, является списком с пробелами. После выполнения переменная ListContains

Еще одна полезная функция - <cfset found = ListContains("12,15,186,99,0", "18")> Это будет искать в списке подстроку и возвращать логическое значение, которое указывает, была ли подстрока найдена как элемент списка.

 contains

Обратите внимание, что это возвращает false, поскольку подстрока «18» не является элементом в списке, который мы передали в качестве первого параметра. Обратите внимание, что у нас есть 186 в списке, но потому что нет элемента, который точно соответствует. Если бы вы использовали оператор содержимого в операторе if, он бы возвратил true:

 <cfif "12,15,186,99,0" contains "18">  
   this is true.  
</cfif>
  ListContains 

Далее мы рассмотрим функции ListFirstListLast Они в основном делают именно так, как вы ожидаете. ListFirstListLast

 <cfoutput>  
   <!--- displays "The" --->  
#ListFirst("The quick brown fox jumps over the lazy dog.", " ")#  
 
<!--- displays "dog." --->  
#ListLast("The quick brown fox jumps over the lazy dog.", " ")#  
</cfoutput>

Функция ListFind Возвращает первый индекс элемента (как целое число). Имейте в виду, что этот поиск чувствителен к регистру.

 <cfset first = ListFind("1,2,3,1,5,6", "5")>

Значение first будет 5, когда мы выполним эту строку кода.

Наконец, ListDeleteAt Мы просто передаем ему список и позицию, которую хотим удалить.

 <cfset newList = ListDeleteAt("1,2,3,4,5", 2)>

Когда мы выполняем этот код, переменная newList содержит значение «1,3,4,5», потому что мы удалили второй элемент списка, 2.

Использование списков с HTML-формами

Я обнаружил, что наиболее распространенное использование списков в ColdFusion в сочетании с HTML-формами. Когда вы создаете форму, которая содержит несколько элементов с одинаковым именем, например, флажки, результаты представляются в виде списка. Вот пример:

 products.cfm:  
<form name="deleteProducts" action="delete.cfm">  
 Product 1: <input type="checkbox" name="productID" value="1"><br>  
 Product 2: <input type="checkbox" name="productID" value="2"><br>  
 Product 3: <input type="checkbox" name="productID" value="3"><br>  
Product 4: <input type="checkbox" name="productID" value="4"><br>  
<input type="Submit" value="Delete">  
</form>

Теперь, если вы установите первые три флажка и нажмете «Удалить», будет отправлена ​​переменная формы productID Когда мы доберемся до страницы удаления, мы просто зациклим список:

 delete.cfm:  
<cfif isDefined("form.productID")>  
 <cfloop list="#form.productID#" index="i">  
   <cfquery name="delete" datasource="myDSN">  
     DELETE FROM Products  
     WHERE ProductID = #i#  
   </cfquery>  
 </cfloop>  
</cfif>

Здесь мы проверяем, есть ли переменная формы. Это необходимо при отправке флажков. Если вы не установите ни один из флажков, переменная productID не будет отправлена. Поэтому, когда он достигает delete.cfm, он не будет существовать, и будет возникать ошибка при попытке перебрать переменную. Мы перебираем список идентификаторов продуктов и выполняем запрос на удаление каждого из них.

Когда вы сталкиваетесь с ситуациями в повседневном кодировании, вы обнаружите, что у вас есть много возможностей применить эту технику. Если вы удаляете продукты из базы данных или работаете с другими формами HTML, вы обнаружите, что списки очень и очень удобны. Это один из инструментов, с которым вы хорошо ознакомитесь.

В нашем последнем рассмотрении структур данных ColdFusion мы рассмотрим запросы ColdFusion. Они очень полезны и очень просты в использовании и применении. До следующего раза, счастливого кодирования!