我想在我的控制台应用程序中存储汽车的所有品牌和型号。
所以我可以这样打印出来:
- Toyota
Corolla
Camry
...
- Nissan
Altima
Sentra
...
所以,我认为我需要某种层次数据。我想到了制作班级制作和班级模型。 Make有一个模型列表。然后我有制作清单。但这看起来过于复杂。这种事情的最佳解决方案是什么?
答案 0 :(得分:1)
这取决于你的意思,“商店”。在磁盘?在内存中的应用程序?
数据库有利于持久存储此类事物。如果这看起来有点过分,但您需要存储在磁盘上,则可以使用CSV或XML文件。如果您希望它内置到您的应用程序中,您可以以编程方式创建它,但最好嵌入资源并将其读入合适的结构(见下文)..
根据您在应用程序/程序中的操作,存储和表示此数据的方法有很多种,很多种。对象图(使用类,继承等),DataSet,树,......
答案 1 :(得分:0)
我想到的最简单的内存存储是Dictionary<string, List<string>>
,您可以使用make到模型列表进行填充。请注意,如果您想知道给定模型与哪些品牌相关联,这不是那么方便,因此在确定结构之前了解常见的使用模式非常重要。
如果你想将它存储在数据库中,那么你必须考虑一个模式,可能是这样的:
Make ( MakeName,
PRIMARY KEY MakeName )
Model ( MakeName,
ModelName,
FOREIGN KEY MakeName REFERENCES Make(MakeName),
PRIMARY KEY (MakeName, ModelName) )
答案 2 :(得分:0)
真的取决于你的应用程序的含义和模型,如果它们只是字符串,那么你可以使用像dictionary<string,list<string>>
这样的列表字典,字典的键将是make,值是列表模特
答案 3 :(得分: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);
}
}