Comment faire un tableau à 3 dimensions ?

Messages postés
262
Date d'inscription
mardi 26 février 2002
Statut
Membre
Dernière intervention
27 février 2012
- - Dernière réponse : cs_fabiano13
Messages postés
262
Date d'inscription
mardi 26 février 2002
Statut
Membre
Dernière intervention
27 février 2012
- 22 mai 2011 à 23:16
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
Afficher la suite 

12 réponses

Messages postés
14567
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 octobre 2019
136
0
Merci
Bonjour,

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

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

Commenter la réponse de NHenry
Messages postés
262
Date d'inscription
mardi 26 février 2002
Statut
Membre
Dernière intervention
27 février 2012
0
Merci
Merci Henry,

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

D'avance merci.
Fabiano
Commenter la réponse de cs_fabiano13
Messages postés
14567
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 octobre 2019
136
0
Merci
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.

Commenter la réponse de NHenry
Messages postés
262
Date d'inscription
mardi 26 février 2002
Statut
Membre
Dernière intervention
27 février 2012
0
Merci
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
Commenter la réponse de cs_fabiano13
Messages postés
14567
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 octobre 2019
136
0
Merci
Bonjour,

Substitue la fonction Equals dans ta structure.

Public Overrides Equals(...) As boolean

Commenter la réponse de NHenry
Messages postés
262
Date d'inscription
mardi 26 février 2002
Statut
Membre
Dernière intervention
27 février 2012
0
Merci
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
Commenter la réponse de cs_fabiano13
Messages postés
14567
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 octobre 2019
136
0
Merci
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.

Commenter la réponse de NHenry
Messages postés
262
Date d'inscription
mardi 26 février 2002
Statut
Membre
Dernière intervention
27 février 2012
0
Merci
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
Commenter la réponse de cs_fabiano13
Messages postés
14567
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 octobre 2019
136
0
Merci
Bonjour,

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

Commenter la réponse de NHenry
Messages postés
262
Date d'inscription
mardi 26 février 2002
Statut
Membre
Dernière intervention
27 février 2012
0
Merci
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

Commenter la réponse de cs_fabiano13
Messages postés
14567
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 octobre 2019
136
0
Merci
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.

Commenter la réponse de NHenry
Messages postés
262
Date d'inscription
mardi 26 février 2002
Statut
Membre
Dernière intervention
27 février 2012
0
Merci
Ok merci.
Commenter la réponse de cs_fabiano13