Combinaison de collections

Le
fraction
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 ?
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
fraction
Le #22301001
On 26 juin, 21:10, fraction
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. :-(
Jean-Marc
Le #22303051
On Jun 26, 9:10 pm, fraction
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
Vincent Guichard
Le #22304501
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
fraction
Le #22324801
On 27 juin, 20:23, Jean-Marc
On Jun 26, 9:10 pm, fraction




> 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". :-)
Publicité
Poster une réponse
Anonyme