簡體   English   中英

如何在C#中存儲層次數據

[英]How to store hierachical data in C#

我想將汽車的所有品牌和型號存儲在控制台應用程序中。

所以我可以像這樣打印它們:

     - Toyota
         Corolla      
         Camry  
         ...

     - Nissan
        Altima  
        Sentra  
        ...

因此,我假設我需要某種等級數據。 我當時正在考慮制作Class Make和Class Model。 制作有型號列表。 然后我有品牌清單。 但這看起來過於復雜。 這類事情的最佳解決方案是什么?

這取決於您所說的“存儲”。 在磁盤上? 在應用程序的內存中?

數據庫對於這種事情的持久存儲很有用。 如果這看起來有些矯kill過正,但您需要存儲在磁盤上,則可以使用CSV或XML文件。 如果您希望將其內置到您的應用程序中,則可以通過編程方式創建它,但是最好嵌入資源並將其讀取到合適的結構中(請參見下文)。

根據您將要在應用程序/程序中執行的操作,存儲和表示此數據的方式有很多很多。 對象圖(使用類,繼承等),數據集,樹等...

想到的最簡單的內存中存儲是Dictionary<string, List<string>> ,您可以使用從make到模型列表的映射來填充該Dictionary<string, List<string>> 請注意,如果您想知道給定模型與哪些品牌相關聯,這並不方便,因此在建立結構之前了解常見的使用模式很重要。

如果要將其存儲在數據庫中,則必須考慮一個架構,可能是這樣的:

Make  ( MakeName,
        PRIMARY KEY MakeName )

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

真正取決於品牌和型號對您的應用程序意味着什么,如果它們只是字符串,那么您可以使用諸如dictionary<string,list<string>>之類的dictionary<string,list<string>>的字典,該字典的鍵將為make,而值則為型號清單

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);            
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM