Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Combinaison de collections

4 réponses
Avatar
fraction
J'ai un probl=E8me lorsque je combine deux niveaux de collections.
Dans le code suivant :

Public Sub essai()
Dim compteur1, compteur2 As Integer
Dim collec1 As New Collection
Dim collec2 As New Collection
For compteur1 =3D 1 To 4
collec1.Add collec2
Next compteur1
For compteur1 =3D 1 To 4
For compteur2 =3D 1 To 5
collec1(compteur1).Add compteur2
Next compteur2
Next compteur1
End Sub

Normalement, on devrait obtenir une collection m=E8re (collec1) et
quatre collections filles (1,2,3,4,5). Or les collections filles
obtenues r=E9p=E8tent quatre fois la collection 1,2,3,4,5. Comment faire ?

4 réponses

Avatar
fraction
On 26 juin, 21:10, fraction wrote:
J'ai un problème lorsque je combine deux niveaux de collections.
Dans le code suivant :

Public Sub essai()
Dim compteur1, compteur2 As Integer
Dim collec1 As New Collection
Dim collec2 As New Collection
For compteur1 = 1 To 4
collec1.Add collec2
Next compteur1
For compteur1 = 1 To 4
    For compteur2 = 1 To 5
    collec1(compteur1).Add compteur2
    Next compteur2
Next compteur1
End Sub

Normalement, on devrait obtenir une collection mère (collec1) et
quatre collections filles (1,2,3,4,5). Or les collections filles
obtenues répètent quatre fois la collection 1,2,3,4,5. Comment faire ?



Quel manque de savoir vivre, j'ai oublié de vous saluer. :-(
Avatar
Jean-Marc
On Jun 26, 9:10 pm, fraction wrote:
J'ai un problème lorsque je combine deux niveaux de collections.
Dans le code suivant :

Public Sub essai()
Dim compteur1, compteur2 As Integer
Dim collec1 As New Collection
Dim collec2 As New Collection
For compteur1 = 1 To 4
collec1.Add collec2
Next compteur1
For compteur1 = 1 To 4
    For compteur2 = 1 To 5
    collec1(compteur1).Add compteur2
    Next compteur2
Next compteur1
End Sub

Normalement, on devrait obtenir une collection mère (collec1) et
quatre collections filles (1,2,3,4,5). Or les collections filles
obtenues répètent quatre fois la collection 1,2,3,4,5. Comment faire ?



Salut,

En fait, le problème est tout simple.
Dans ta première boucle, tu fais:
For compteur1 = 1 To 4
collec1.Add collec2
Next compteur1



C'est la le probleme. Tu as simplement ajouté dans collec1 quatre fois
la MEME
référence à la MEME collection (collec2).
Il faut bien piger que collec2 est un objet, et quand tu fais Add, tu
n'ajoutes qu'une
référence au même objet.

Pour régler ton problème,il te suffit de créer 4 collections collec2
(un tableau).
Voici :

Public Sub essai()
Dim i As Integer, _
j As Integer

Dim collec1 As New Collection
Dim collec2(4) As New Collection

For i = 1 To 4
collec1.Add collec2(i)
Next i

For i = 1 To 4
For j = 1 To 5
collec1.Item(i).Add j
Next j
Next i
End Sub


Bonne suite!

--
Jean-marc
Avatar
Vincent Guichard
Le 27/06/2010 20:23, Jean-Marc a écrit :
Salut,


Salut

En fait, le problème est tout simple.
Dans ta première boucle, tu fais:
For compteur1 = 1 To 4
collec1.Add collec2
Next compteur1



C'est la le probleme. Tu as simplement ajouté dans collec1 quatre foi s
la MEME
référence à la MEME collection (collec2).
Il faut bien piger que collec2 est un objet, et quand tu fais Add, tu
n'ajoutes qu'une
référence au même objet.

Pour régler ton problème,il te suffit de créer 4 collections coll ec2
(un tableau).



Ou de ne pas passer par un tableau, et d'ajouter directement les
nouvelles collections:

Dim c1 As New Collection
Dim i As Integer, j As Integer
For i = 1 To 4
c1.Add New Collection
For j = 1 To 5
c1.Item(i).Add j
Next j
Next i

Vincent Guichard
Avatar
fraction
On 27 juin, 20:23, Jean-Marc wrote:
On Jun 26, 9:10 pm, fraction wrote:





> J'ai un problème lorsque je combine deux niveaux de collections.
> Dans le code suivant :

> Public Sub essai()
> Dim compteur1, compteur2 As Integer
> Dim collec1 As New Collection
> Dim collec2 As New Collection
> For compteur1 = 1 To 4
> collec1.Add collec2
> Next compteur1
> For compteur1 = 1 To 4
>     For compteur2 = 1 To 5
>     collec1(compteur1).Add compteur2
>     Next compteur2
> Next compteur1
> End Sub

> Normalement, on devrait obtenir une collection mère (collec1) et
> quatre collections filles (1,2,3,4,5). Or les collections filles
> obtenues répètent quatre fois la collection 1,2,3,4,5. Comment fair e ?

Salut,

En fait, le problème est tout simple.
Dans ta première boucle, tu fais:

> For compteur1 = 1 To 4
> collec1.Add collec2
> Next compteur1

C'est la le probleme. Tu as simplement ajouté dans collec1 quatre fois
la MEME
référence à la MEME collection (collec2).
Il faut bien piger que collec2 est un objet, et quand tu fais Add, tu
n'ajoutes qu'une
référence au même objet.

Pour régler ton problème,il te suffit de créer 4 collections collec 2
(un tableau).
Voici :

Public Sub essai()
Dim i   As Integer, _
    j   As Integer

Dim collec1     As New Collection
Dim collec2(4)  As New Collection

    For i = 1 To 4
        collec1.Add collec2(i)
    Next i

    For i = 1 To 4
        For j = 1 To 5
            collec1.Item(i).Add j
        Next j
    Next i
End Sub

Bonne suite!

--
Jean-marc



Merci pour vos réponse. Je n'ai toujours pas compris pourquoi, mais ça
a l'air de marcher.
Pour info, le concept de mon IA est évolutif. J'ai achevé mon système
expert, mon "déducteur logico-mathématiques", maintenant il a muté, e t
je programme une sorte de "singe bureaucrate". :-)