我想在控制台应用程序中存储汽车的所有品牌和型号。
所以我可以像这样打印它们:
- Toyota
Corolla
Camry
...
- Nissan
Altima
Sentra
...
我假设我需要某种层次数据。我在考虑制作《课堂制作》和《课堂模型》。Make有一个模型列表。然后是make的列表。但这看起来过于复杂了。这类事情的最佳解决方案是什么?
这取决于你所说的"store"是什么意思。在磁盘吗?在应用程序的内存中?
数据库适合持久化存储这类东西。如果这看起来有点夸张,但又需要存储在磁盘上,那么可以使用CSV或XML文件。如果你想让它内置到你的应用程序中,你可以通过编程方式创建它,但最好嵌入一个资源并将其读入合适的结构(见下文).
根据你在应用程序/程序中要做的事情,有许多,许多,许多方法来存储和表示这些数据。一个对象图(使用类,继承等),一个数据集,一个树,…
这取决于make和models对你的应用意味着什么,如果它们只是字符串,那么你可以使用像dictionary<string,list<string>>
这样的列表字典,字典的键将是make,值是模型列表
想到的最简单的内存存储是Dictionary<string, List<string>>
,您可以用从make到模型列表的映射填充它。请注意,如果您想知道给定模型与什么make(s)相关联,那么这不是那么方便,因此在确定结构之前了解常见的使用模式非常重要。
如果你想把它存储在数据库中,那么你必须考虑一个模式,可能是这样的:
Make ( MakeName,
PRIMARY KEY MakeName )
Model ( MakeName,
ModelName,
FOREIGN KEY MakeName REFERENCES Make(MakeName),
PRIMARY KEY (MakeName, ModelName) )
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);
}
}