Comment faire un tableau à 3 dimensions ?

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 à 12:15
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

12 réponses

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
22 mai 2011 à 13:16
Bonjour,

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

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

0
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 à 14:34
Merci Henry,

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

D'avance merci.
Fabiano
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
22 mai 2011 à 15:03
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.

0
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 à 15:23
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
0

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

Posez votre question
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
22 mai 2011 à 15:39
Bonjour,

Substitue la fonction Equals dans ta structure.

Public Overrides Equals(...) As boolean

0
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 à 15:46
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
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
22 mai 2011 à 15:59
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.

0
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 à 18:59
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
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
22 mai 2011 à 19:19
Bonjour,

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

0
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 à 20:13
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

0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
22 mai 2011 à 22:24
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.

0
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
Ok merci.
0
Rejoignez-nous