Comment faire un tableau à 3 dimensions ?

Signaler
Messages postés
262
Date d'inscription
mardi 26 février 2002
Statut
Membre
Dernière intervention
27 février 2012
-
Messages postés
262
Date d'inscription
mardi 26 février 2002
Statut
Membre
Dernière intervention
27 février 2012
-
Bonjour,

Est-il possible de faire un tableau à 3 dimensions ?

Je cherche donc à faire un tableau à 3 dimensions pour récupérer ensuite ses valeurs.

Du genre :


Private Function MonTableau()
Dim tbTab As Array(Of String, String, Object)
tbTab.add("Element1","Element2", Object1)
tbTab.add("Element3","Element4", Object2)
tbTab.add("Element5","Element6", Object3)
return tbTab
end function



Le but final c'est de pouvoir :
- chercher une valeur du type String sur Element1 (indexOfKey)
- récupérer chacune de ses valeurs (key, value, ??)

Cela me faciliteras considérablement la vie.

D'avance merci.
Fabiano

12 réponses

Messages postés
14676
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
8 juillet 2020
143
Bonjour,

Dim MonTableau(,,) as Type
Redim MonTableau(2,5,8)

Sinon, une structure ou une classe ne serait-elle pas plus adaptée ?

Messages postés
262
Date d'inscription
mardi 26 février 2002
Statut
Membre
Dernière intervention
27 février 2012

Merci Henry,

Mais comment récupérer les valeurs et comment comparer les valeur (indexOf)

D'avance merci.
Fabiano
Messages postés
14676
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
8 juillet 2020
143
Bonjour,

Pour une recherche avec IndexOf, il faut un tableau unidimensionnel.

Donc, une classe/structure serait plus adaptée, éventuellement en substituant la méthode Equals.

Messages postés
262
Date d'inscription
mardi 26 février 2002
Statut
Membre
Dernière intervention
27 février 2012

Effectivement ça marche très bien avec une structure. Encore merci pour ton aide.

Toutefois, je n'arrive toujours pas à faire une recherche d'object dans mon tableau.

Pourrais-tu encore m'aider, s'il te plait.


    Public Structure StrObjDistXbuz
        Dim BtnRadio As Object
        Dim PctBox As Object
        Dim GrpBox As Object
    End Structure

    Private Function StrObjDist()
        Dim MaStructure(200) As StrObjDistXbuz
        MaStructure(0).BtnRadio = Radio_01
        MaStructure(0).PctBox = PctBox_01
        MaStructure(0).GrpBox = GroupBox1

        MaStructure(1).BtnRadio = Radio_02
        MaStructure(1).PctBox = PctBox_02
        MaStructure(1).GrpBox = GroupBox2

        MaStructure(2).BtnRadio = Radio__03
        MaStructure(2).PctBox = PctBox_03
        MaStructure(2).GrpBox = GroupBox3

        Return MaStructure
    End Function


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim myIndex As Integer = Array.IndexOf(StrObjDist.BtnRadio, Radio_02) ' Cela ne marche pas !!!!

msgbox(myIndex)

End Sub



D'avance merci pour tout ton aide.
Fabiano
Messages postés
14676
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
8 juillet 2020
143
Bonjour,

Substitue la fonction Equals dans ta structure.

Public Overrides Equals(...) As boolean

Messages postés
262
Date d'inscription
mardi 26 février 2002
Statut
Membre
Dernière intervention
27 février 2012

Je suis désolé je ne comprends pas. Pourrais-tu me montrer un exemple plus complet.

Sinon j'ai fait une fonction pas trop belle, mais cela marche. Mais je trouve que c'est lourd !

    Private Function SearchElmtStructure(ByVal sFct As Object, ByVal sElmt As String, ByVal sMot As String)
        Dim myIndex As Integer = -1
        Dim i As Integer = 0
        For Each Search In sFct
            If (sElmt = "BtnRadio") Then
                myIndex = String.Compare(sFct(i).BtnRadio.name, sMot)
            Else
                myIndex = String.Compare(sFct(i).PctBox.name, sMot)
            End If
            If (myIndex > 0) Then
                Exit For
            End If
            i += 1
        Next
        Return myIndex
    End Function

Dim myIndex As Integer = SearchElmtStructure(StrObjDist, "BtnRadio", "Radio_02")
msgbox(myIndex)


D'avance merci.
Fabiano
Messages postés
14676
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
8 juillet 2020
143
Bonjour,

Dans le code de ta structure, commence à taper "Overrides" ensuite, sélectionne "Equals", après à toi de tester et remplir le corps de la fonction.

Elle permet de tester l'égalité entre 2 objets, pas forcément de même type.

Messages postés
262
Date d'inscription
mardi 26 février 2002
Statut
Membre
Dernière intervention
27 février 2012

Merci Henri,

Ce que tu me suggères, si j'ai bien compris, cela me renvoie true ou false.

Toutefois je cherche une commande qui me retourne l'index de ma recherche.

Du même genre : Dim myIndex As Integer = Array.IndexOf(StrObjDist.BtnRadio, Radio_02)

Sinon, ma fonction marche bien mais je trouve quelle est trop lourde car il va y avoir beaucoup d'élément dans ce tableau.

A te lire,
Fabiano
Messages postés
14676
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
8 juillet 2020
143
Bonjour,

Tu substitue la méthode Equals dans ta structure, et ensuite, tu utilises le IndexOf de ton tableau/collection.

Messages postés
262
Date d'inscription
mardi 26 février 2002
Statut
Membre
Dernière intervention
27 février 2012

Est-ce que c'est comme ça ?

Si oui alors comment faire appel a cette fonction ?

Je nage dans le vide total !!

Est-ce que ce n'est pas abuser si je te demande de montrer un exemple complet ou adapter mon code, s'il te plait.

D'avance merci.
Fabiano


    Public Structure StrObjDistXbuz
        Dim BtnRadio As Object
        Dim PctBox As Object
        Dim GrpBox As Object

        Public Overrides Function Equals(ByVal obj As [Object]) As Boolean
            If obj Is Nothing Or Not Me.GetType() Is obj.GetType() Then
                Return False
            End If
            Return Me.Equals(BtnRadio) And Me.Equals(PctBox) And Me.Equals(PctBox)
        End Function

    End Structure

    Private Function StrObjDist()
        Dim MaStructure(200) As StrObjDistXbuz
        MaStructure(0).BtnRadio = Radio_01
        MaStructure(0).PctBox = PctBox_01
        MaStructure(0).GrpBox = GroupBox1

        MaStructure(1).BtnRadio = Radio_API_Left_Xbuz_02
        MaStructure(1).PctBox = PctBox_API_Left_Xbuz_02
        MaStructure(1).GrpBox = GroupBox2

        MaStructure(2).BtnRadio = Radio_03
        MaStructure(2).PctBox = PctBox_03
        MaStructure(2).GrpBox = GroupBox3

        Return MaStructure
    End Function

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'ici (...)
End Sub

Messages postés
14676
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
8 juillet 2020
143
Bonjour,

obj est l'objet à tester, donc en fonction de son type, il faut que tu agisse en conséquence :
StrObjDistXbuz : Controler l'ensemble des 3 attributs de l'objet (obj.* is me.*)
PictureBx : obj is PctBox
GroupBox : obj is GrpBox
RadioButton : obj is BtnRadio

ensuite, tu trouveras bien.
Regardes la valeur en mode debug.

Messages postés
262
Date d'inscription
mardi 26 février 2002
Statut
Membre
Dernière intervention
27 février 2012

Ok merci.