Comparaison entre ArrayList et optimisation

CGSI3 Messages postés 416 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 7 janvier 2018 - Modifié par ichiriac le 8/11/2013 à 17:18
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 - 21 oct. 2013 à 18:20
Bonjour,

    ''' <summary>
    ''' Fonction: Retourne La liste des éléments en commun avec la deuxième liste
    '''                et les déduits de chaque liste les éléments en commun trouvés
    ''' </summary>
    Function CompareArrays(ByRef FirstArray As ArrayList, ByRef SecondArray As ArrayList) As ArrayList
        Dim B1 As Array, B2 As Array
        B1 = FirstArray.ToArray : B2 = SecondArray.ToArray
        ' Effectue un regroupement et laisse les éléments non joints
        Dim B3 As Array = FirstArray.ToArray.Intersect(B2).ToArray 
        ' Ne retourne que les élément présent dans les 2 listes et la met dans une 3eme liste
        'Dim B4 As Array = B1.Intersect(B2).ToArray ' Cette ligne n'est pas possible ????

        ' Ne retourne que les élément présent dans la première liste sans doublon sur la 3 eme liste
        Dim G1 As ArrayList = New ArrayList(FirstArray.ToArray.Except(B3).ToArray)
        ' Ne retourne que les élément présent dans la seconde liste sans doublon sur la 3 eme liste
        Dim G2 As ArrayList = New ArrayList(SecondArray.ToArray.Except(B3).ToArray)
        Dim G3 As New ArrayList(B3)

        G1.Sort() : G2.Sort() : G3.Sort()
        FirstArray = G1.Clone : SecondArray = G2.Clone
        Return G3
    End Function


Je vous joins cette fonction que j'ai réalisé récemment et qui fonctionne pour vous poser 4 questions:

Décelez vous des erreurs dans ce code ou des améliorations possible ?

Pourquoi l'affectation variable B3 fonctionne et non celle de la variable B4 ?

Existe t'il un paramétrage de la fonctions intersect ?
Car cette fonction renvoie uniquement une égalité que si les 2 éléments sont identique en respectant la casse (Majuscule ou minuscule)
J'aimerai pouvoir ajouter quelques options a cette fonction.

L'utilisation de Option Compare Text ou Option Compare Binary aurait t elle un impact sur cette fonction?


--

3 réponses

cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
21 oct. 2013 à 16:36
Bonjour CGSI3

Je me suis permis de recopier le code qui était illisible:

''' <summary>
''' Fonction: Retourne La liste des éléments en commun avec la deuxième liste
et les déduits de chaque liste les éléments en commun trouvés
''' </summary>

Function CompareArrays(ByRef FirstArray As ArrayList, ByRef SecondArray As ArrayList) As ArrayList

Dim B1 As Array, B2 As Array

B1 = FirstArray.ToArray : B2 = SecondArray.ToArray

' Effectue un regroupement et laisse les éléments non joints

Dim B3 As Array = FirstArray.ToArray.Intersect(B2).ToArray


'Ne retourne que les élément présent dans les 2 listes et la met dans une 3eme liste
'Dim B4 As Array = B1.Intersect(B2).ToArray

' Cette ligne n'est pas possible ????
' Ne retourne que les élément présent dans la première liste sans doublon sur la 3 eme liste
Dim G1 As ArrayList = New ArrayList(FirstArray.ToArray.Except(B3).ToArray)
' Ne retourne que les élément présent dans la seconde liste sans doublon sur la 3 eme liste

Dim G2 As ArrayList = New ArrayList(SecondArray.ToArray.Except(B3).ToArray)

Dim G3 As New ArrayList(B3)

G1.Sort() : G2.Sort() : G3.Sort()
FirstArray = G1.Clone : SecondArray = G2.Clone


Return G3

End Function


Cordialement

@+ Le Pivert
0
CGSI3 Messages postés 416 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 7 janvier 2018 1
Modifié par CGSI3 le 21/10/2013 à 17:31
Bonjour Ami Pivert,

Concernant ce post, bcp de chose m'intrigue dans la manière de gérer des ArrayList

Tout d'abord je me rend compte qu'en effectuant .ToArray a un arraylist on a une liste de fonctions qui ne sont pas référencés dans un array normal.
Ceci me fait dire qu'il existe une multitude de chose que nous n'utilisons pas.
J'effectue cette recherche, de manière également a savoir si ce chemin de travail permet d'aller + vite qu'un travail par boucle sur un array ou une liste.

Ainsi pour supprimer les doublons j'ai fabriqué cela

    Public Function Kill_Doublon(ByRef FirstArray As ArrayList) As ArrayList
' Supprime les doublons d un ArrayList
Dim SansDoublons As ArrayList = New ArrayList(FirstArray.ToArray.Distinct.ToArray)
Return SansDoublons
End Function


Aussi je mettrais comme remarque que ce genre de fonction doit normalement gérer des chaines de caractères mais également tout type d'objet (non vérifié pour le moment)

J'ajouterai également qu'un arrayList est fort pratique pour initialiser un Listbox ou Combobox avec sa propriétée .DataSource
et qu'en poussant un peu avec la propriétée Tag on peut travailler avec des arraylist d'objet de manière très intéressante. (je détail pas car c'est pas le sujet)

(Quand est ce qu'ils remettrons nos avatars ? j'ai l'air tout nu sur ce post lol
... et élargir un peu cette colonne car c'est pas large, )
--
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
21 oct. 2013 à 18:20
Oui je suis d'accord avec toi, ce nouveau site nous perturbe. Nous avons perdu nos marques. Les balises de code n'ont pas de retour à la ligne en ce moment. Je l'ai signalé sur ce post.

http://codes-sources.commentcamarche.net/forum/affich-10009659-l-editeur

Pour ce qui est des ArrayList, je ne suis pas un spécialiste. Tu devrais te tourner vers ucfoutu qui lui est une référence dans ce domaine entre autre.
0
Rejoignez-nous