ListToArray: Effacer les elements doubles

Résolu
fionalabelle Messages postés 14 Date d'inscription mercredi 25 janvier 2006 Statut Membre Dernière intervention 25 août 2006 - 10 mai 2006 à 09:57
fionalabelle Messages postés 14 Date d'inscription mercredi 25 janvier 2006 Statut Membre Dernière intervention 25 août 2006 - 11 mai 2006 à 16:23
Bonjour à tous,<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


J’ai une Liste que j’aimerai trier. C-a-d eviter qu’un elemen apparaisse plus d’une fois dans la liste.


Quelqu’un pourrait-il me dire comment le faire ? Quelle function utiliser ? Je n’arrive pas à trouver une reponse dans google.


Merci


MaListe = 08.05.2006,08.05.2006,08.05.2006,09.05.2006,09.05.2006,10.05.2006,11.05.2006,12.05.2006





J’aimerai obetenir a la fin:


MaNuvelleListe = 08.05.2006, 09.05.2006,10.05.2006,11.05.2006,12.05.2006




Merci pour votre aide

9 réponses

fionalabelle Messages postés 14 Date d'inscription mercredi 25 janvier 2006 Statut Membre Dernière intervention 25 août 2006
11 mai 2006 à 16:23
Salut à vous,

voilà la solution à mon problem. Ce code fonctionne tres bien.

Merci pour votre aide.
element de ma nouvelle Liste<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />


<cfset maNouvListe = ""><!--- ma nouvelle Liste sans Double --->


<cfloop list="#maListe#" index="listIdx" delimiters=","> <!--- une fois sur l’ancienne Liste avec Doublets --->


<cfif NOT ListFind(maNouvListe,listIdx)><!--- si la valeur n’est pas encore dans la liste, il faut l’introduire --->


<cfset maNouvListe =ListAppend(maNouvListe,listIdx)>


</cfif>


</cfloop>


<cfoutput># maNouvListe #</cfoutput>
3
nickadele Messages postés 1251 Date d'inscription mercredi 7 août 2002 Statut Modérateur Dernière intervention 10 avril 2013
10 mai 2006 à 11:32
Petite réflexion, si je suis bien toutes tes demandes, ta liste provient-elle bien de données venant de ta base de données...
Car dans ce cas, pourquoi ne pas faire une requète avec un Goupe By qui ne reprendra qu'une seule fois chaque date ?

Nickadele
0
nickadele Messages postés 1251 Date d'inscription mercredi 7 août 2002 Statut Modérateur Dernière intervention 10 avril 2013
10 mai 2006 à 12:02
J'ai pas su tester mais à mon avis ça devrait fonctionner :

<cffunction name="ArrayToUniqueValue" returntype="Array">
<cfargument name="HayStack" required="true">

<cfif isArray(arguments.HayStack)>
<cfset TempStruct = StructNew() />
<cfloop index="i" from="1" to="#ArrayLen(arguments.HayStack)#">
<cfif not StructKeyExists(TempStruct, arguments.Haystack[i])>
<cfset TempStruct[arguments.Haystack[i]] = arguments.Haystack[i] />
</cfif>
</cfloop>
<cfreturn StructKeyArray(TempStruct) />
</cfif>
<cfset ReturnArray = ArrayNew(1) />
<cfreturn ReturnArray />
</cffunction>
0
syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 20
10 mai 2006 à 13:38
Euh.. Alors je dirais sans me formaliser sur la syntaxe..



cfset tmpList = ''

cfloop index=i from=0 to=#listlen(maListe)# {

cfif(NOT listfind(listgetat(maListe,i),tmpList)) tmpList &= listgetat(maListe,i) & ','

}

cfif listLen(tmpList) tmpList = left(tmpList,len(tmpList)-1) <!--- il faut oter la dernière virgule --->

cfset aValue= ListToArray(tmpList)



et voila !!

S.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fionalabelle Messages postés 14 Date d'inscription mercredi 25 janvier 2006 Statut Membre Dernière intervention 25 août 2006
10 mai 2006 à 15:20
Salut Nickadele,


<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />


Oui ma liste provient bien des données venant de ma base de données.
" ...... Car dans ce cas, pourquoi ne pas faire une requète avec un Goupe By qui ne reprendra qu'une seule fois chaque date ? "





Une une requète avec un Goupe By ne m’aide pas trop, car dans ma DB il peut avoir un jour plusieurs selon les heures de rdv.


Exemple(données de ma DB) :


Date Heure RDV


10.05.2006 10 :00 Reunion


10.05.2006 11 :00 Reunion1


10.05.2006 12 :00 Reunion2


10.05.2006 12:30 Reunion3


11.05.2006 12:30 Reunion3
12.05.2006 12:30 Reunion3


12.05.2006 13:30 Reunion3



Dans une requète je lis la date, Heure, RDV where date = sysdate. Elle m’affiche tous ce donc j’ai besoin.





Mais dans la liste, j’aimerai que qu’une date(10.05.2006) soit presente seulemment 1 fois.





Merci





Fiona
0
syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 20
10 mai 2006 à 15:22
Je suis assez réservé pour le group By à moins de faire une requete
dédiée avec un distinct dans le select. Pour ma part je pense que mon
ptit algo du dessus peut faire l'affaire, lorsque tu l'auras bien mis
en forme en langage Cold fusion.

S.
0
cs_lfontaine Messages postés 203 Date d'inscription lundi 23 décembre 2002 Statut Membre Dernière intervention 11 mai 2006
11 mai 2006 à 05:59
Salut,

Si ta requete est triee par Date, un simple cfoutput query="marequette" group="Date" devrait faire l'affaire pour construire une liste sans doublons.


Laurent
0
fionalabelle Messages postés 14 Date d'inscription mercredi 25 janvier 2006 Statut Membre Dernière intervention 25 août 2006
11 mai 2006 à 14:52
Salut à vous,

merci pour vos suggestion, mais je n'arrive pas à toruver une Solution.
J'ai aussi essyé le code propsé par Syndrael et je n'ai pas de bonne solution.

Voici le code que j'ai pu changer en coldFusion

<cfset tmpList = ''>
<cfloop index="i" from="1" to="#listlen(meineListe)#">
<cfif (NOT listfind(listgetat(meineListe,i),tmpList))>
tmpList &= listgetat(meineListe,i) & ','
</cfif>


<cfif listLen(tmpList)>tmpList = left(tmpList,len(tmpList)-1) </cfif> <!--- il faut oter la dernière virgule --->
<cfset aValue= ListToArray(tmpList)>
</cfloop>
0
syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 20
11 mai 2006 à 15:01
Ton </cfloop> doit se faire après ton premier </cfif>..

Autre chose <cfset tmpList &= listgetat(meineListe,i) & ','>

Donc il est normal que tu n'as po la bonne solution puisque celle ke
j'ai fournie qui est somme toute bonne dans l'idée ne l'est pas dans la
syntaxe. Il faut la mettre à la syntaxe Cold fusion.

La dernière remarque de lFontaine est très judicieuse. Tu peux aussi
exploiter cette voie si tu te perds avec la mienne. C'est juste k'étant
fainéant, moins je tape sur le clavier, mieux je me porte..

S.
0
Rejoignez-nous