2013-03-19 257 views
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> 

下面是结果:

取出的DUP之前

列表:

lacunar_DM,同型半胱氨酸,HTN,烟草,未定 ,lacunar_DM,同型半胱氨酸,烟草

名单中除去的DUP后:

lacunar_DM,同型半胱氨酸, HTN,烟草,待定 ,lacunar_DM,同型半胱氨酸,烟草

+3

请提供您的一些代码。 – imthepitts 2013-03-19 16:57:36

+1

并提供一个包含要删除的重复项的字符串示例。 – 2013-03-19 16:59:38

+3

发布一个小*自包含的* repro案例来说明问题。 – Leigh 2013-03-19 16:59:39

回答

1

的问题是,你与cfsavecontent创建的列表中有换行符,因为该列表中的每个项目是中cfsavecontent它自己的路线。由于您加入的其他列表中没有相同的空格,因此您无法获得正确的结果。

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

试试这个,而不是使用cfsavecontent

<cfset lacunar_list = "lacunar_DM,Homocysteine,HTN,Tobacco,undetermined" > 
<cfset combination = ListAppend(lacunar_list, lacunar)> 
+0

我完全这样做,它的工作。谢谢!我非常沮丧,只是看不到那些空白处。感谢你敏锐的目光。 – Char 2013-03-26 16:05:49

4

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

+0

大声笑,你让我大约30秒。 – Travis 2013-03-19 17:39:33

+0

完全错过了。谢谢参观。 – Char 2013-03-26 16:02:49

8

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

lacunar_DM, Homocysteine, HTN, Tobacco, undetermined ,lacunar_DM,Homocysteine,Tobacco 
-----------^-------------^----^--------^------------^------------X------------X 
+0

就是这样,谢谢。我讨厌你盯着某些东西几个小时,而你却看不到明显的问题。谢谢你的新鲜眼睛。 :) – Char 2013-03-26 16:02:09

5

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

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

如果你确实有一些有效的空间,那么我会建议使用周围领域的Trim()当你手动编译列表。

YourList = ListAppend(YourList, Trim(ListItem)) 
+0

就是这样。当我失去视野时,让这些新鲜的眼睛看一看就太好了。谢谢 – Char 2013-03-26 16:03:52

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> 
+0

..或[arrayFindNoCase](http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WS98CF660A-0C9E-4e85-BBA1-89862B60EB4D.html)如果您想忽略大小写区别。 – Leigh 2013-03-19 18:17:04

+0

@好的,谢谢。我在我的回答中加了这个。 – 2013-03-19 18:19:49

+0

谢谢。很高兴知道。 :) – Char 2013-03-26 16:04:43