Communauté francophone sur les Eggdrops
Différence entre deux listes - Version imprimable

+- Communauté francophone sur les Eggdrops (https://forum.eggdrop.fr)
+-- Forum : Eggdrop et TCL (https://forum.eggdrop.fr/forumdisplay.php?fid=8)
+--- Forum : Bouts de Scripts (https://forum.eggdrop.fr/forumdisplay.php?fid=17)
+--- Sujet : Différence entre deux listes (/showthread.php?tid=1436)



Différence entre deux listes - CrazyCat - 07/10/2013

Voici deux moyens d'avoir la différence entre deux liste, ou plus exactement la liste des éléments de la première liste qui n'appartiennent pas à la seconde.

Cette méthode n'est pas optimale du tout, mais fonctionne sur quasi toutes les versions de tcl :
tcl
proc ldiff {list1 list2} {
   foreach suppr $list2 {
      set ind [lsearch $list1 $suppr]
      set list1 [lreplace $list1 $ind $ind]
   }
   return $list1
}



Cette version est l'approche optimale, moins explicite pour le néophyte mais elle soulage l'eggdrop :
tcl
proc ldiff {list1 list2} {
   foreach element $list1 {
      if { !($element in $list2) } {
         lappend diff $element
      }
   }
   return $diff
}





RE: Différence entre deux listes - CrazyCat - 20/10/2020

Et une nouvelle version utilisant lmap (tcl8.6 obligatoire):
tcl
proc ldiff {list1 list2 {option -exact}} {
   if {$option ne "-nocase"} { set option -exact }
   return [lmap x $list1 {expr {[lsearch $option $list2 $x] < 0 ? $x : [continue]}}]
}





RE: Différence entre deux listes - BdS - 21/10/2020

Très intéressant aussi. Merci pour le partage :)