Moh*_*mad 10 arrays coldfusion duplicates
我有一个接收一串标签的函数.为了单独保存标记,该函数将字符串转换为数组:
this.tags = listToArray(this.tags, ", ");
如果存在重复值,如何删除重复值?
小智 18
我喜欢使用Java来完成这类任务:
<cfset tags = "apples,oranges,bananas,pears,apples" />
<cfset tagsArray = createObject("java", "java.util.HashSet").init(ListToArray(tags)).toArray() />
<cfdump var="#tags#" />
<cfdump var="#tagsArray#" />
Run Code Online (Sandbox Code Playgroud)
唯一的问题是需要考虑案例,所以认为"苹果"和"APPLES"是不同的东西(从技术上讲,是的,取决于你的系统可能会有所不同).方法是首先降低列表中的所有内容.
Ant*_*ony 10
从列表中删除重复项的简单方法是首先将列表转换为结构,然后将结构转换为数组.但是,如果列表中的项目顺序很重要,则可能不合适,因为结构中的元素将被排序.
如果项的顺序很重要,则需要手动构建数组,而不是使用listToArray功能.
<!--- CF9 --->
<cfset tags = "apples,oranges,bananas,pears,APPLES" />
<cfset tagArray = arrayNew(1) />
<cfloop list="#tags#" index="tag" delimiters=",">
<cfif not ArrayFindNoCase(tagArray,tag)>
<cfset arrayAppend(tagArray, tag) />
</cfif>
</cfloop>
Run Code Online (Sandbox Code Playgroud)
小智 5
由于您实际上是从要转换为数组的字符串/列表开始的,因此可以先将字符串通过ListRemoveDuplicates传递,然后再将其转换为数组。ListRemoveDuplicates在Coldfusion 10中引入;输入参数为(list,delimiter =“,”,ignoreCase = FALSE)。
this.tags = listToArray(listRemoveDuplicates(arrayInput,", ",TRUE));
Run Code Online (Sandbox Code Playgroud)
如果实际上是从数组开始的,则需要先将其转换为列表,然后再转换为列表。
this.tags = listToArray(listRemoveDuplicates(arrayToList(arrayInput),", ",TRUE) );
Run Code Online (Sandbox Code Playgroud)