Besoin de stocker des valeurs ... Quoi utiliser ? Tableaux? Collections? avec St
mioumiounorris
Messages postés57Date d'inscriptiondimanche 24 février 2008StatutMembreDernière intervention 4 septembre 2011
-
21 août 2009 à 19:44
mioumiounorris
Messages postés57Date d'inscriptiondimanche 24 février 2008StatutMembreDernière intervention 4 septembre 2011
-
23 août 2009 à 15:39
Bonjour !
Comme l'indique le titre, je cherche à stocker des valeurs pendant l'exécution de mon programme. Voici en gros mon projet.
C'est un petit logiciel pour faciliter la création d'images mappées en HTML (zones réactives avec <map> et ).
J'utilise des fenêtres pour ajouter des maps et des zones (area) en demandant à l'utilisateur les infos nécessaires à leur création (URL / Attribut "name" ...etc...). Graphiquement, je stocke tout ça dans plusieurs DataGridView. Un pour les maps et un pour les zones (area). Pour ne pas m'étaler graphiquement, je souhaite n'afficher que le nécessaire selon la map ou la zone sélectionnée dans les DataGridView. Exemple:
-Si je sélectionne une map dans le DataGrid MAPS, je n'affiche que les zones correspondantes à cette map.
-Si je sélectionne une zone (area) dans le DataGrid AREAS, je n'affiche en dessous que les détails correspondants à cette zone (avec labels et TextBox). Du genre le "name", l'URL, le tableau des coordonnéees de chaque points ...etc...
Il me faut donc conserver en mémoire des valeurs qui ne seront pas forcément affichées tout de suite, mais plus tard quand je sélectionnerais une map ou une zone.
J'ai donc penser utiliser les tableaux en premier lieu, mais ça me semble un peu compliqué, étant donné que je ne sais pas à l'avance combien j'aurais de maps, ni de zones, ni combien de points j'aurais par zone.
Je me suis donc dis que je devrais déjà structurer la chose avec une "Structure" ... par exemple pour la Structure "zoneArea", je stocke des strings, mais il me faut encore un tableau dedans pour stocker les coordonnées des points. Toujours le même problème, je ne sais pas à l'avance combien j'aurais de points.
Je me dis donc qu'il me faut insérer une collection dans ma structure, mais j'ai besoin d'une collection à plusieurs dimensions (pour X et Y).
Est-ce que les collections peuvent avoir plusieurs dimensions comme les tableaux (pas trouvé d'exemple de collections à plusieurs dimensions )?
Peut-on stocker des objets issus d'une "Structure" dans un tableau ou une collection ?
Enfin bref, je pense que vous voyez vaguement les interrogations que je me pose. Je suis complètement perdu dans les choix que je dois faire et je ne connais sûrement pas toutes les possibilités.
Je suis donc preneur de tous conseils pour savoir quelle serait la meilleure marche à suivre.
Merci d'avance pour vos conseils éclairés !
A voir également:
Besoin de stocker des valeurs ... Quoi utiliser ? Tableaux? Collections? avec St
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 21 août 2009 à 20:30
La collection, à ma connaissance, ne stocke que sur une dimension. Ce dit, tout comme un tableau d'ailleurs, elle stocke des objets. Ces objets peuvent très bien être des classes, structures, ou autres, contenant plusieurs attributs.
Tu pourrais très bien avoir avoir, par exemple, une collection contenant des instance de la structure Point (System.Drawing.Point). Structure qui d'ailleurs contient entre-autre, 2 propriétés X et Y représentant les coordonnées (en valeurs entières) d'un point dans un plan 2D
[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
mioumiounorris
Messages postés57Date d'inscriptiondimanche 24 février 2008StatutMembreDernière intervention 4 septembre 2011 21 août 2009 à 20:49
Merci pour ton aide Casy
Je pense qu'à mon niveau, utiliser des tableaux serait sûrement plus simple, mais il me reste le problème que je ne sais pas à la base combien de valeurs ils contiendront.
J'ai bien vu que l'on pouvait faire un "Redim Preserve", mais est-ce vraiment indiqué de faire des redimensionnements de tableaux à tout va ?
Effectivement, j'avais oublié la structure Point déjà existante dont je vais certainement me servir.
Mais donc, un tableau peut donc lui aussi contenir des objets ? J'avoue que ça m'arrangerais cette histoire
Je me lance dans un test et je repasse ici si j'ai un problème. En attendant, je suis, évidemment, toujours preneur d'idées en tous genres.
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 21 août 2009 à 22:01
Les tableaux, liste et collections présentent beaucoup de similitude.
Il est vrai que les tableau ne sont pas toujours évident à gérer en redimensionnement dynamique, contraire aux listes et collections.
Le redimensionnement du tableau peut devenir très lourd dès que celui-ci prend du volume. En effet, le redimensionnement passe par la création d'un nouveau tableau à la nouvelle taille, une recopie des données de l'ancien vers le nouveau et enfin une destruction de l'ancien.
Les collections et listes sont prévues justement pour une ajout et une suppression dynamique des éléments.
Je pense que dans ton cas, des listes seraient plus appropriées. Attention à leur gestion tout de même. Dans une liste ou collection, contrairement aux tableaux, tu peux très bien supprimer ou ajouter un élément en plein milieu, décalant ainsi automatiquement les index des éléments qui suivent.
[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
mioumiounorris
Messages postés57Date d'inscriptiondimanche 24 février 2008StatutMembreDernière intervention 4 septembre 2011 22 août 2009 à 00:26
Oki oki. Je commence très vaguement à dépoussiérer tout ça, même si ça reste très vague. J'avais déjà lu ce tuto plusieurs fois, mais c'était encore plus vague que maintenant. J'entrevois une solution avec les List(Of), même si j'ai l'impression qu'une liste n'est rien d'autre qu'une collection.
Dans mon programme... Les maps contiennent des zones (area), et les zones contiennent les propriétés de celles-ci sous forme de String excepté la propriété des points qui contient plusieurs points avec deux valeurs.
Donc si j'ai bien compris, on pourrais faire...
[list]
[*]Création d'une List(Of) "Maps" contenant mes maps "Map1; Map2...".
[*]Une map est une liste "List(Of)" de zones "Area1; Area2...".
[*]Une zone est une Structure contenant mes propriétés Strings sauf pour les coordonnées.
[*]Et dans cette Structure de Strings, j'incruste une "List(Of)" "Points" où chaque point est un objet issu de la Structure Point.
/list
Donc pour le typage de mes listes, j'aurais ...
[list]
[*]"Maps" = Une liste ... de listes ... "List (Of List)" C'est possible ?
[*] "Map1; Map2..." sont de type Structure ... "List (Of maStructureZone)" Possible aussi ?
[*] pour mes points une liste "Points" et pour le type "List (Of Point)
/list
Ca se tient dans le raisonnement je pense, mais est-ce qu'une liste peut contenir des listes ?
A moins que je ne me plante complètement et fasse fausse route dès le début ?
Mayzz
Messages postés2813Date d'inscriptionmardi 15 avril 2003StatutMembreDernière intervention 2 juin 202028 22 août 2009 à 01:28
Salut,
Tu peux utiliser des classes perso héritantes de List(Of AutreClassePerso)
et faire une imbrications de données.
Pour la sauvergarde de celle-ci, une bonne sérialisation et le tour est joué !
Ex (en schématique abrégé...):
Puclic Class Lv1Coll
Inherits List(Of Lv1)
Sub Serialize
Sub Deserialize
End Class
Public Class Lv1
[Property Prop1 As List(Of Lv2)]
[Property Prop2 As List(Of Lv2)]
End Classe
Public Class Lv2
[Property Prop1 As [Type] ]
[Property Prop2 As [Type] ]
End Classe
Public Class Lv3
Inherits List (Of [Type])
End Classe
La sérailisation sauvegardera toutes tes classe dans un fichier, une structure complete, soit sous forme binaire, soit en xml
En gros tu peux créer le schéma que tu veux...
@++
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 22 août 2009 à 10:40
La List est effectivement une collection, mais une collection typée, c'est à dire que tu définie le type de variable qu'elle doit référencée. Contrairement à l'ArrayList qui est une collection non typée, c'est à dire qu'elle référence des variables du type générique Object
Dans ton cas, tu pourrais très bien avoir cette architecture :
Public Structure Area
Dim propriete1 As String
Dim propriete2 As String
Dim points As List(Of System.Drawing.Point)
End Structure
Public Structure Map
Dim attribut1 As String
Dim attribut2 As String
Dim zones As List(Of Area)
End Structure
Public ChezMoi As List(Of Map)
[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
mioumiounorris
Messages postés57Date d'inscriptiondimanche 24 février 2008StatutMembreDernière intervention 4 septembre 2011 23 août 2009 à 15:39
Salut Mayzz et merci de passer par là
Ta solution a l'air assez complexe à mettre en oeuvre pour un débutant pour moi. En effet, les classes j'ai déjà beaucoup de mal ainsi que la POO. Je comprends les tutos sur les classes, mais je n'arrive jamais vraiment à les mettre en oeuvre, et souvent je ne vois pas tout de suite que je pourrais utiliser des classes, j'ai tendance à tout faire en procédural pour l'instant.
Pour le sérialisation, j'ai découvert le mot il y a vraiment très peu, et je t'avoue que je ne vois pas trop ce que c'est, excepté que ça sert à mettre des choses en sauvegarde pour les ressortir plus tard ... à part ça ...
Je comprends tout de suite plus ton architecture Casy. Après ma petite réflexion de l'autre soir je vois ce que j'ai à faire