2011-03-08 7 views

답변

4

요청한 기능을 수행하는 사전 정의 된 함수는 없지만이를 수행하는 자신의 함수를 쉽게 구현할 수 있습니다. 내가 제공 한 기능은 매우 간단하고 확장하기 쉽습니다.

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); 
} 
9
<cfset temp = structNew()> 
<cfloop list="a,b,c,a,c" index="i"> 
    <cfset temp[i] = ""> 
</cfloop> 
<cfset distinctList = structKeyList(temp)> 

이것은 내가 생각할 수있는 가장 간단한 솔루션입니다. 이것의 단점은 주문이 보존되지 않으며 목록 항목이 대소 문자를 구분하지 않는다는 것입니다. 대소 문자를 구별하지 않으려면 Java의 해시 세트를 사용하십시오.

+0

한 창의성 –

+1

@Henry에 대한 : 놀랍도록 감동. 너는 나에게 많은 시간을 구해줬다. –

7

값을 추가하기 전에 arrayContains 또는 listFindNoCase를 사용하여 값이 존재하는지 확인하십시오.

4

당신은 CF 10 라일로 4 년 Underscore.cfc library를 사용할 수 있습니다

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

나는 그보다 단순한를 얻을 수 있다고 생각하지 않는다!

(면책 조항 : 나는 Underscore.cfc을 썼다)