2011-03-08 105 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創意 – 2011-03-08 04:42:52

+1

@Henry:赫然留下深刻的印象。你爲我節省了很多時間 – 2013-09-11 14:49:35

7

在添加值之前,請使用arrayContains或listFindNoCase檢查它是否存在。

4

可以在CF 10或Railo 4使用Underscore.cfc library

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

我不認爲它會比這更簡單!

(聲明:我寫Underscore.cfc)