[英]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.