2013-03-19 255 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