2013-03-19 13 views
6

Ho una lista di stringhe e ho bisogno di rimuovere i duplicati. Ho provato un certo numero di cose, come ad esempio:Rimozione di duplicati da un elenco

Purtroppo, nessuno di loro ha lavorato. Non sono sicuro di cosa stia succedendo. Quindi qualsiasi aiuto sarebbe apprezzato.

Attualmente sto utilizzando una versione gratuita per sviluppatori di ColdFusion 10 nel caso in cui ciò influenzi le cose.

Lista Esempio:

lacunar_DM, omocisteina, HTN, Tabacco, indeterminato , lacunar_DM, omocisteina, Tabacco

Questo è stato creato aggiungendo un elenco statico con uno dinamico tirato da un database:

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

ecco i risultati:

elenco prima di asportare dups:

lacunar_DM, omocisteina, HTN, Tabacco, indeterminato , lacunar_DM, omocisteina, Tabacco

List dopo la rimozione dups:

lacunar_DM, omocisteina, HTN, Tabacco, indeterminato , lacunar_DM, Omocisteina, Tabacco

+3

Si prega di fornire alcune del codice. – imthepitts

+1

E fornire un esempio della stringa con i duplicati che si desidera rimuovere. –

+3

Posta un piccolo * caso di riproposizione * autosufficiente che dimostra il problema. – Leigh

risposta

1

Il problema è che la lista che si è creato con cfsavecontent ha caratteri di nuova riga in essa, perché ogni elemento in tale elenco è su di essa la propria linea all'interno cfsavecontent. Dal momento che l'altra lista con la quale ti stai unendo non ha lo stesso spazio, non otterrai i risultati corretti.

In genere, è meglio rimuovere gli spazi bianchi non necessari dagli elenchi in Coldfusion.

Prova questa invece di utilizzare cfsavecontent:

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

Ho fatto esattamente questo e ha funzionato. Grazie! Ero frustrato e non riuscivo a vedere quegli spazi bianchi. Grazie per i tuoi occhi acuti. – Char

4

Accertarsi che ciascun elemento nell'elenco disponga di spazi vuoti. " Tobacco" non corrisponde a "Tobacco" e non verrà visualizzato come duplicato. Nella query SQL, tagliare i valori per assicurarsi che non vi siano spazi iniziali o finali. Nel tuo elenco statico, assicurati che non vi siano spazi tra le virgole.

+0

Lol, mi hai preso per circa 30 secondi. – Travis

+0

Assolutamente mancato. Grazie per dare un'occhiata. – Char

8

Penso che il tuo problema sia che il tuo elenco contiene spazio bianco extra. "Omocisteina" e "Omocisteina" non sono gli stessi valori. Allo stesso modo, "Tabacco" e "Tabacco" non sono gli stessi valori.

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

E 'stato grazie. Odio quando fissi qualcosa per ore e non riesci a vedere il problema evidente. Grazie per il tuo nuovo paio di occhi. :) – Char

5

Come già detto, le voci dell'elenco contengono uno spazio bianco extra. Guardando il tuo elenco, tutti gli elementi utilizzano _ come spazi, quindi la soluzione più semplice è rimuovere prima gli spazi, quindi rimuovere i duplicati.

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

Se si dispone di alcuni spazi validi, allora io suggerirei di usare un Trim() attorno ai campi quando si compila la lista manualmente.

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

E 'stato. È così bello avere tutti questi occhi nuovi a dare un'occhiata quando ho perso la prospettiva. Grazie – Char

2

Nel caso in cui non si dispone di CF10, questo è il mio modo preferito per rimuovere i duplicati da un elenco.

<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

.. o [arrayFindNoCase] ​​(http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WS98CF660A-0C9E-4e85-BBA1-89862B60EB4D.html) se si desidera ignorare le differenze tra maiuscole e minuscole. – Leigh

+0

@Leigh sì, grazie. L'ho aggiunto alla mia risposta. –

+0

Grazie. Buono a sapersi. :) – Char

Problemi correlati