2013-03-19 2 views
6

У меня есть список строк, и мне нужно удалить дубликаты. Я попробовал несколько вещей, таких как:Удаление дубликатов из списка

К сожалению, ни один из них не работал. Я действительно не уверен, что происходит. Поэтому любая помощь будет оценена по достоинству.

В настоящее время я использую бесплатную версию ColdFusion 10 для разработчиков, если это влияет на вещи.

Список Sample:

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, Гомоцистеин, Табак

+3

Просьба представить некоторые из вашего кода. – imthepitts

+1

И укажите пример строки с дубликатами, которые вы хотите удалить. –

+3

Опубликовать небольшой * автономный * репродукт, который демонстрирует проблему. – Leigh

ответ

1

Проблема заключается в том, что список, который вы создали с cfsavecontent имеет символы новой строки в нем, потому что каждый элемент в этом списке находится на его собственной линии в пределах cfsavecontent. Поскольку другой список, к которому вы присоединяетесь, не имеет одинаковых пробелов, вы не получите правильных результатов.

Как правило, лучше удалить ненужные пробелы из списков в Coldfusion.

Попробуйте это вместо того, чтобы использовать cfsavecontent:

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

Я сделал это точно, и это сработало. Спасибо! Я был расстроен и просто не мог видеть эти белые пробелы. Спасибо за ваши острые глаза. – Char

4

Удостоверьтесь, что в каждом элементе списка есть пробелы. " Tobacco" не равно "Tobacco" и не будет отображаться как дубликат. В своем SQL-запросе обрезайте значения, чтобы убедиться, что нет начальных или конечных пробелов. В своем статическом списке убедитесь, что между запятыми нет пробелов.

+0

Lol, Ты получил меня примерно на 30 секунд. – Travis

+0

Полностью пропустил это. Спасибо, что посмотрели. – Char

8

Я думаю, ваша проблема в том, что ваш список содержит лишнее пространство. «Гомоцистеин» и «Гомоцистеин» - это не те же значения. Аналогичным образом, «Табак» и «Табак» - это не те же ценности.

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

Это было спасибо. Я ненавижу, когда вы что-то часами наблюдаете, и вы просто не видите очевидной проблемы. Спасибо за твою свежую пару глаз. :) – Char

5

Как уже упоминалось, элементы вашего списка содержат дополнительное пространство. Посмотрев на ваш список, все элементы используют _ в качестве пробелов, поэтому самое простое решение - сначала удалить пробелы, а затем удалить дубликаты.

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

Если у вас есть какие-то действительные пробелы, то я предложил бы использовать Trim() вокруг полей при компиляции списка вручную.

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

Вот и все. Очень приятно, что все эти свежие глаза смотрят, когда я потерял перспективу. Спасибо – Char

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), если вы хотите игнорировать различия в case. – Leigh

+0

@Leigh да, спасибо. Я добавил это к моему ответу. –

+0

Спасибо. Хорошо знать. :) – Char

Смежные вопросы