отчет о простуде - PullRequest
       12

отчет о простуде

9 голосов
/ 08 марта 2011

Мне было интересно, существует ли простой способ принудительного применения различных значений в списке или массиве Coldfusion.

Спасибо

Ответы [ 5 ]

10 голосов
/ 08 марта 2011
<cfset temp = structNew()>
<cfloop list="a,b,c,a,c" index="i">
  <cfset temp[i] = "">
</cfloop>
<cfset distinctList = structKeyList(temp)>

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

7 голосов
/ 08 марта 2011

Перед добавлением значения проверьте, существует ли оно с помощью arrayContains или listFindNoCase.

4 голосов
/ 07 июля 2012

Вы можете использовать библиотеку Underscore.cfc в CF 10 или Railo 4:

_ = new Underscore();// instantiate the library    
uniqueArray = _.uniq(array);// convert an array to a unique array

Я не думаю, что это становится проще!

(Отказ от ответственности: я написал Underscore.cfc)

4 голосов
/ 08 марта 2011

Нет предопределенных функций, которые делают то, что вы просите, но легко реализовать ваши собственные функции, которые бы это делали.Предоставленные мною функции очень просты и легко расширяются.

variables.myList = "one,two,three";
variables.myList = ListAppendDistinct(variables.myList, "three");
variables.myList = ListAppendDistinct(variables.myList, "four");

function ListAppendDistinct(list, value)
{
    var _local = StructNew();
    _local.list = list;
    if (NOT ListContains(_local.list, value))
    {
        _local.list = ListAppend(_local.list,value);
    }
    return _local.list;
}

Вы можете использовать вышеописанную функцию для четкого добавления в массив, все это предполагает, что вы используете разделители по умолчанию.Я не уверен в «размере» ваших данных, потому что они могут дорого обойтись.

variables.myArray = ArrayNew(1);
variables.myArray[1] = "one";
variables.myArray[2] = "two";
variables.myArray[3] = "three";

variables.myArray = ArrayAppendDistinct(variables.myArray, "three");
variables.myArray = ArrayAppendDistinct(variables.myArray, "four");

function ArrayAppendDistinct(array, value)
{
    var _local = StructNew();
    _local.list = ArrayToList(array);
    _local.list = ListAppendDistinct(_local.list,value);
    return ListToArray(_local.list);
}
1 голос
/ 14 августа 2018

Для тех, кто смотрит на этот ответ сейчас: это так.Есть функция с именем ListRemoveDuplicates().Он был добавлен в ColdFusion 10 (2017).

Например, приведенный ниже код возвращает уникальные значения «AA, BB, CC»

newList = listRemoveDuplicates("AA,BB,CC,AA,AA,AA,BB", ",");
writeOutput("newList = #newList#");
...