Есть ли более элегантный способ преобразования строки в массив? - PullRequest
4 голосов
/ 01 мая 2011

Я хотел бы преобразовать строку из 11 цифр в массив. Есть ли более элегантный способ сделать это в ColdFusion 9?

local.string = [];

for (local.i = 1; local.i <= len(arguments.string); local.i++)
{
    local.string[ local.i ] = mid(arguments.string, local.i, 1);
}

Если бы моя строка была 12345, то массив выглядел бы как string[1] = 1; string[2] = 2 и т. Д. *

Ответы [ 4 ]

7 голосов
/ 01 мая 2011

Существует элегантный способ, который, я думаю, будет работать в любой версии ColdFusion.

Хитрость заключается в том, чтобы использовать функции управления списком CF - если вы укажете разделитель "" (то есть ничего), он будет видеть каждыйсимвол строки как элемент списка.

Итак, что вы хотите:

local.string = listToArray(arguments.string, "");

И это даст вам ваш массив символов ...

6 голосов
/ 03 мая 2011

Это работает на CF8 и не зависит от "ошибки" в CF9:

stringAsList = REReplace( string,"(.)","\1,","ALL" );
array = ListToArray( stringAsList );
0 голосов
/ 20 ноября 2011

Если вы действительно хотите использовать java-метод String.split (), он возвращает String [], поэтому вам придется скопировать его значения в новый массив, например. myArray = arrayNew(1) + myArray.addAll( myStringArr ).

0 голосов
/ 05 мая 2011

Интересно, что вы можете сделать что-то подобное, используя метод .split () java, и получить схожие результаты.

Немного предыстории: поскольку CF построен на Java, он может использовать многие из базовых java-методов и классов. По словам Рупеша Кумана из Adobe (http://coldfused.blogspot.com/2007/01/extend-cf-native-objects-harnessing.html),, массив CF является реализацией java.util.List, поэтому все методы списка также доступны для массивов CF. Одним из наиболее полезных является метод .split (). берет строку и превращает ее в массив на основе произвольного разделителя из 0 или более символов.

Вот что я сделал: установил список, состоящий из 11 цифр, использовал метод split для создания массива, а затем отобразил результат.

    <cfset testList = "12345678901" />
    <cfset testArray = testList.split("") />
    <cfset request.cfdumpinited = false />
    <cfdump label="testArray" expand="true" var="#testArray#"/>
    <cfabort />

Если вы запустите это, вы увидите, что в итоге вы получите массив из 12 элементов с первым пустым элементом индекса. Просто удалите его, используя ArrayDelete () или ArrayDeleteAt (), и все будет хорошо. Это должно работать со всеми версиями ColdFusion начиная с CFMX 6.

...