我有一个字符串列表,我需要删除重复项。我尝试了很多东西,比如:
不幸的是,它们都没有奏效。我真的不确定发生了什么。所以任何帮助都会受到赞赏。
我目前正在使用免费开发者版本的ColdFusion 10以防万一。
样本清单:
lacunar_DM,同型半胱氨酸,HTN,烟草,尚未确定 ,lacunar_DM,同型半胱氨酸,烟草
这是通过附加一个静态列表创建的,该列表包含从数据库中提取的动态列表:
<cfsavecontent variable= "lacunar_list">
lacunar_DM,
Homocysteine,
HTN,
Tobacco,
undetermined
</cfsavecontent>
<cfset combination = ListAppend(lacunar_list, lacunar)>
<cfoutput>
List before removing dups: #combination#<br/>
List after removing dups: #listremoveduplicates(combination, ",", true)#<br/>
</cfoutput>
结果如下:
删除重复之前的列表:
lacunar_DM,同型半胱氨酸,HTN,烟草,尚未确定 ,lacunar_DM,同型半胱氨酸,烟草
删除重复后的列表:
lacunar_DM,同型半胱氨酸,HTN,烟草,尚未确定 ,lacunar_DM,同型半胱氨酸,烟草
答案 0 :(得分:8)
我认为您的问题是您的列表包含额外的空白区域。 “同型半胱氨酸”和“同型半胱氨酸”的值不同。同样,“烟草”和“烟草”的价值也不相同。
lacunar_DM, Homocysteine, HTN, Tobacco, undetermined ,lacunar_DM,Homocysteine,Tobacco
-----------^-------------^----^--------^------------^------------X------------X
答案 1 :(得分:5)
如上所述,您的列表项包含额外的空白区域。查看列表,所有项目都使用_
作为空格,因此最简单的解决方案是首先删除空格,然后删除重复项。
listRemoveDuplicates( Replace( YourList, " ", "", "ALL" ) )
如果你确实有一些有效的空格,那么当你手动编译列表时,我会建议在字段周围使用Trim()
。
YourList = ListAppend( YourList, Trim( ListItem ) )
答案 2 :(得分:4)
确保列表中的每个项目都修剪了空格。 " Tobacco"
不等于"Tobacco"
,不会被视为重复。在SQL查询中,修剪值以确保没有前导或尾随空格。在静态列表中,确保逗号之间没有空格。
答案 3 :(得分:2)
如果您没有CF10,这是我从列表中删除重复项的首选方法。
<cfset newlist = [] />
<cfloop list="#combination#" index="i">
<cfif NOT arrayFind(newlist,trim(i))> // can also use arrayFindNoCase
<cfset arrayAppend(newlist,trim(i))>
</cfif>
</cfloop>
<cfoutput>
#arraytolist(newlist)#
</cfoutput>
答案 4 :(得分:1)
问题是您使用cfsavecontent
创建的列表中包含换行符,因为该列表中的每个项目都位于cfsavecontent
内的自己的行上。由于您加入的其他列表没有相同的空格,因此您无法获得正确的结果。
通常,最好从Coldfusion中的列表中删除不必要的空格。
尝试此操作而不是使用cfsavecontent
:
<cfset lacunar_list = "lacunar_DM,Homocysteine,HTN,Tobacco,undetermined" >
<cfset combination = ListAppend(lacunar_list, lacunar)>