2011-10-19 8 views
0

Je souhaite stocker toutes les marques et tous les modèles de voitures dans mon application de console.Comment stocker des données hiérarchiques en C#

Je peux les imprimer comme ceci:

 - Toyota 
     Corolla  
     Camry 
     ... 

    - Nissan 
     Altima 
     Sentra 
     ... 

Donc, je suppose que je besoin d'une sorte de données hierarchiques. Je pensais à faire classe Make et Class Model. Faire A une liste de modèles. Et puis j'ai une liste de Makes. Mais cela semble trop compliqué. Quelle est la meilleure solution pour ce genre de choses?

+0

Si vous utilisez le système de serveur SQL et vos tables sont déjà créé avec des contraintes de clé étrangère appropriées juste pointer un fichier linq vers sql à la structure créera automatiquement la hiérarchie d'objets que vous recherchez. – asawyer

Répondre

1

Cela dépend de ce que vous entendez par "magasin". En disque? En mémoire pour l'application?

Les bases de données sont bonnes pour le stockage persistant de ce genre de chose. Si cela semble excessif mais que vous avez besoin de stocker sur le disque, vous pouvez utiliser un fichier CSV ou XML. Si vous le souhaitez intégré à votre application, vous pouvez le créer par programmation, mais mieux intégrer une ressource et le lire dans une structure appropriée (voir ci-dessous).

Selon ce que vous allez faire dans votre application/programme, il y a beaucoup, beaucoup, beaucoup, beaucoup de façons de stocker et de représenter ces données. Un objet graphique (en utilisant des classes, héritage etc), un DataSet, un arbre, ...

+1

Exactement: Le modèle de données en mémoire va dépendre de la façon dont vous voulez y accéder. –

0

Le stockage en mémoire le plus simple qui vient à l'esprit est un Dictionary<string, List<string>>, que vous remplissez avec un mappage des marques à des listes de modèles . Rappelez-vous, ce n'est pas très pratique si vous voulez savoir à quel (s) marque (s) un modèle donné est associé, il est donc important de comprendre les modes d'utilisation courants avant de vous installer sur une structure.

Si vous souhaitez stocker ceci dans une base de données, alors vous devez penser à un schéma, probablement quelque chose comme ceci:

Make (MakeName, 
     PRIMARY KEY MakeName) 

Model (MakeName, 
     ModelName, 
     FOREIGN KEY MakeName REFERENCES Make(MakeName), 
     PRIMARY KEY (MakeName, ModelName)) 
0

dépend vraiment de ce qui fait et modèles signifient pour votre application, si ils ne sont que des chaînes, vous pouvez utiliser un dictionnaire de listes comme dictionary<string,list<string>> les clés du dictionnaire sera la marque, et les valeurs sont des listes de modèles

0
class CarModel { 
    public CarModel(string name){ 
     CarModelName = name; 
     CarSubModels = new IList<CarModel>(); 
    } 

    public string CarModelName {get;set;} 
    public IList<CarModel> CarSubModels {get;private set;} 
    public void AddSubModel(CarModel car){ 
     if (car == null) 
      throw new ArgumentNullException("car"); 
     if (!CarSubModels.Contains(car)) 
      CarSubModels.Add(car); 
    } 
    public void RemoveSubModel(CarModel car){ 
     if (car == null) 
      throw new ArgumentNullException("car"); 
     if (CarSubModels.Contains(car)) 
      CarSubModels.Remove(car); 
    } 

    public void Print(int level=0){ 
     StringBuilder sb = new StringBuilder(); 
     for (int i = 0; i < level; i++) 
      sb.Append(' '); 
     sb.Append(CarModelName); 
     string line = sb.ToString(); 
     Console.Writeline(line); 
     foreach (CarModel car in CarSubModels) 
      car.Print(level+1);    
    } 

} 
Questions connexes