如何在C#中关联两个CSV文件并实现车主车辆报表输出?
解决车主与车辆关联的问题
嘿,作为C#新手能上手报表项目已经超棒啦!你现在的核心需求就是把车主和他们名下的车辆对应起来,我来帮你调整代码,让它实现你想要的效果~
首先,咱们可以先把车辆列表按ownerID分组,这样后续找每个车主的车辆时不用反复遍历所有车辆,效率更高也更清晰。用LINQ的GroupBy就能轻松做到这一点:
// 先将车辆按ownerID分组,转换成字典方便快速查找 var vehiclesByOwner = cars2.GroupBy(v => v.oID) .ToDictionary(group => group.Key, group => group.ToList());
接下来,遍历车主列表的时候,直接从分组好的字典里取出对应车主的车辆就行,还能顺便统计数量:
foreach (Owner o in own2) { // 输出车主基础信息 Console.WriteLine($"{o.oID}\t{o.oFirst}\t{o.oLast}"); // 尝试获取当前车主的所有车辆 if (vehiclesByOwner.TryGetValue(o.oID, out var userVehicles)) { // 遍历并输出每辆车的信息 foreach (Vehicle v in userVehicles) { // 注意这里的拼写:mileage(你原来写的milage是拼写错误哦) Console.WriteLine($"\t{v.year}\t{v.make}\t{v.model}\t{v.mileage}"); } // 输出车辆数量统计行 Console.WriteLine($"Owner Id..... {userVehicles.Count} cars"); } else { // 如果车主没有车辆,显示0辆 Console.WriteLine("Owner Id..... 0 cars"); } // 加个空行分隔不同车主,报表看起来更整洁 Console.WriteLine(); }
小说明:
- 用
GroupBy+ToDictionary的方式,把车辆按车主ID归类,后续查找时间复杂度是O(1),比你原来每次遍历所有车辆的O(n)高效很多,数据量大的时候差别会很明显。 TryGetValue是为了避免车主没有车辆时抛出找不到键的异常,代码更健壮。- 我帮你修正了拼写错误:
milage应该是mileage,记得保持类的属性名和这里一致哦~
内容的提问来源于stack exchange,提问作者swim247
相关产品推荐
相关产品推荐

