Creer et passer en parametre un arraylist de stucture

Résolu
thonyboy Messages postés 165 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 16 février 2011 - 16 févr. 2011 à 11:56
NSUADI Messages postés 540 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 1 février 2013 - 16 févr. 2011 à 17:34
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

mdevaux62 Messages postés 111 Date d'inscription dimanche 24 décembre 2000 Statut Membre Dernière intervention 17 novembre 2012 7
16 févr. 2011 à 14:18
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
  
3
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
16 févr. 2011 à 14:28
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+
0
mdevaux62 Messages postés 111 Date d'inscription dimanche 24 décembre 2000 Statut Membre Dernière intervention 17 novembre 2012 7
16 févr. 2011 à 14:40
BigFish, tu as testé avant de poster ?
0
NSUADI Messages postés 540 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 1 février 2013 2
16 févr. 2011 à 16:29
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
thonyboy Messages postés 165 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 16 février 2011
16 févr. 2011 à 17:12
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
0
NSUADI Messages postés 540 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 1 février 2013 2
16 févr. 2011 à 17:34
@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
0
Rejoignez-nous