从列表中删除重复项

时间:2013-03-19 16:54:36

标签: coldfusion coldfusion-10

我有一个字符串列表,我需要删除重复项。我尝试了很多东西,比如:

不幸的是,它们都没有奏效。我真的不确定发生了什么。所以任何帮助都会受到赞赏。

我目前正在使用免费开发者版本的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,同型半胱氨酸,烟草

5 个答案:

答案 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)>