6

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

不幸的是,他们都没有工作。我真的不确定发生了什么。所以任何帮助将不胜感激。

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

4

5 回答 5

8

我认为您的问题是您的列表包含额外的空白。“同型半胱氨酸”和“同型半胱氨酸”不是相同的值。同样,“烟草”和“烟草”不是相同的值。

lacunar_DM, Homocysteine, HTN, Tobacco, undetermined ,lacunar_DM,Homocysteine,Tobacco
-----------^-------------^----^--------^------------^------------X------------X
于 2013-03-19T17:30:22.683 回答
5

如前所述,您的列表项包含额外的空白。查看您的列表,所有项目都_用作空格,因此最简单的解决方案是先删除空格,然后删除重复项。

listRemoveDuplicates( Replace( YourList, " ", "", "ALL" ) )

如果您确实有一些有效空格,那么我建议Trim()您在手动编译列表时在字段周围使用 a。

YourList = ListAppend( YourList, Trim( ListItem ) )
于 2013-03-19T18:02:12.627 回答
4

确保列表中的每个项目都删除了空格。" Tobacco"不相等"Tobacco",也不会被视为重复。在您的 SQL 查询中,修剪值以确保没有前导或尾随空格。在您的静态列表中,确保逗号之间没有空格。

于 2013-03-19T17:29:52.773 回答
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>
于 2013-03-19T18:08:38.130 回答
1

问题是您创建的列表中cfsavecontent有换行符,因为该列表中的每个项目都在cfsavecontent. 由于您加入的另一个列表没有相同的空格,因此您不会得到正确的结果。

通常,最好从 Coldfusion 的列表中删除不必要的空格。

试试这个而不是使用cfsavecontent

<cfset lacunar_list = "lacunar_DM,Homocysteine,HTN,Tobacco,undetermined" >
<cfset combination = ListAppend(lacunar_list, lacunar)>
于 2013-03-25T03:04:26.713 回答