Creer et passer en parametre un arraylist de stucture

[Résolu]
Signaler
Messages postés
165
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
16 février 2011
-
Messages postés
540
Date d'inscription
mardi 4 août 2009
Statut
Membre
Dernière intervention
1 février 2013
-
Bonjour

J'aimerais creer un arraylist d'une structure et passé celui ci dans une fonction qui aura pour objectif de le remplir.

Exemple :

Structure mastruc
        Public nom As String
        Public Prenom As String
End Structure

Sub Principal()
    dim retour as integer
    Dim montableau as ???? ' un arraylist de ma structure
    ' APPEL MA FONCTION ET REMPLI MON ARRAY
    retour=Rempli_mastructure(montableau) '?
    for i=0 to montableau.lengh
        writeln(montable(i).nom
    next i
end sub

Function Rempli_mastruct(byref tableau as mastruct) as integer
    ' Ajoute 2 élement au tableau mastructure
    for i=0 to 2
        tableau(i).nom="Testnom"+i.tostring
        tableau(i).prenom="Testprenom"
    next
    return 0
End Function


Je n'ai pas la moindre idée de comment faire.

Si quelqu'un pouvait me donner une piste.

D'avance merci.

ThonyBoy

6 réponses

Messages postés
111
Date d'inscription
dimanche 24 décembre 2000
Statut
Membre
Dernière intervention
17 novembre 2012
6
Bonjour,
Essaie une liste typée : list(of ...)



    Structure maStructure
        Public nom As String
        Public prenom As String
    End Structure

    Sub Principal()
        'Créer une liste d'éléments maStructure
        Dim montableau As New List(Of maStructure)
        'Ajouter des éléments à la liste
        Remplit_maStructure(montableau)
        For Each elt As maStructure In montableau
            Console.WriteLine(elt.nom)
        Next
    End Sub

    Sub Remplit_maStructure(ByRef tableau As List(Of maStructure))
        ' Ajouter 3 élements au tableau maStructure
        Dim elt As maStructure
        For i As Integer = 0 To 2
            elt.nom = "TestNom_" + i.ToString
            elt.prenom = "TestPrenom"
            tableau.Add(elt)
        Next
    End Sub
  
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
10
Salut,

euuuuh c'est une question piege ?!?!

Dim montableau as mastruc

devrait faire l'affaire !

pour le reste cela me parait correct, mise à part que dans ton cas je ne vois pas trop l’intérêt d'avoir une valeur en retour.
Donc une sub plutôt qu'une fonction

de fait, je ferai comme cela :

Sub Principal()
    dim retour as integer
    Dim montableau as mastruc ' un arraylist de ma structure
    ' APPEL MA FONCTION ET REMPLI MON ARRAY
    Rempli_mastructure montableau 'je ne connai pas le vb.net ou vb2005 donc vérifie la syntaxe avant d'essayer
    for i=0 to montableau.lengh
        writeln(montable(i).nom
    next i
end sub

Sub Rempli_mastruct(byval tableau as mastruct) 'byval me semble plus approprié
    ' Ajoute 2 élement au tableau mastructure
    for i=0 to 2
        tableau(i).nom="Testnom"+i.tostring
        tableau(i).prenom="Testprenom"
    next
End sub


A+
Messages postés
111
Date d'inscription
dimanche 24 décembre 2000
Statut
Membre
Dernière intervention
17 novembre 2012
6
BigFish, tu as testé avant de poster ?
Messages postés
540
Date d'inscription
mardi 4 août 2009
Statut
Membre
Dernière intervention
1 février 2013
2
Salut,

Tu peux le faire en utilisant les tableaux comme ceci:
 Structure maStructure
        Public nom As String
        Public prenom As String
    End Structure

 Sub Principal()
        'Créer une liste d'éléments maStructure
          Dim d() As maStructure
          ReDim d(2) 'tu redimensionnes selon que tu désires
        'Ajouter des éléments à la liste
        Remplit_maStructure2(d)
        For i = 0 To d.Length - 1
            Console.WriteLine(d(i).nom + " " + d(i).prenom)
        Next
    End Sub

Sub Remplit_maStructure2(ByRef tableau() As maStructure)
        ' Ajouter 3 élements au tableau maStructure

        For i As Integer = 0 To 2
            tableau(i).nom = "TestNom_" + i.ToString
            tableau(i).prenom = "TestPrenom_" + i.ToString
        Next
End Sub


Ce qui compte,ce n'est pas ce qu'on a mais plutôt ce que l'on fait avec ce qu'on a...

Visual Basic .Net is the best
and vb6.0
Messages postés
165
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
16 février 2011

Un grand merci a Mdevaux62 et NSuadi.

J'ai testé avec succés la proposition de Mdevaux62.
Du coup je n'ai pas testé celle de NSuadi mais peut etre qu'elle fonctionne également. Sauf que je voulais éviter un tableau à cause du Redim qui n'est pas trés optimisant. (D'autant que je ne connais pas a l'avance le nombre d'elément ce qui m'obligerait a faire un redim +1 dans ma boucle)

A bigfish, je ne comprend pas pourquoi tu répond si tu ne connais pas vb net... Quand a la valeur de retour, il vrai que j'ai simplifié le plus possible mon probleme donc mon code exemple. Mon code est plus complexe est fait bien sur autre chose que la boucle qui rempli mon tableau avec des valeur bidons. C'était juste pour illustrer.

En tout cas c'est souhaite l'entraide. Encore merci
Messages postés
540
Date d'inscription
mardi 4 août 2009
Statut
Membre
Dernière intervention
1 février 2013
2
@thonyboy:
Du coup je n'ai pas testé celle de NSuadi mais peut etre qu'elle fonctionne également.Sauf que je voulais éviter un tableau à cause du Redim qui n'est pas trés optimisant.


Je peux t'assurer qu'elle fonctionne mais bon c'est vrai,tu as raison...j'y ai pensé moi aussi avant de poster mais bon une solution de plus ne peux pas faire de mal.

à ciao,bonsoir!!!

Ce qui compte,ce n'est pas ce qu'on a mais plutôt ce que l'on fait avec ce qu'on a...

Visual Basic .Net is the best
and vb6.0