C# 如何使用for循环实现两个列表按条件匹配输出对应数据
现有代码的问题
- 嵌套循环内部直接触发
return,第一次匹配/不匹配都会直接终止整个方法,根本无法遍历完所有车辆和司机的配对 - 结果集合定义在循环内部,每次匹配到都会新建集合,无法累积所有匹配的配对数据
- 单个配对不匹配就直接返回
NotFound,逻辑完全错误,应该是所有遍历完成后没有任何匹配结果才返回404
修正后代码
public IActionResult GetAllVehicleDrivers() { var VehicleList = new List<Vehicle>() { new Vehicle() { VehNum = "KA04AS1234", VehId = 1 }, new Vehicle() { VehNum = "KA04AS5689", VehId = 2 }, new Vehicle() { VehNum = "KA04AS9874", VehId = 3 }, new Vehicle() { VehNum = "KA04AS5647", VehId = 4 }, new Vehicle() { VehNum = "KA04AS7452", VehId = 5 }, }; var DriverList = new List<Driver>() { new Driver() { DriverName = "Gajaraj", DriverId = 123, VehId = 1 }, new Driver() { DriverName = "Tajar", DriverId = 245, VehId = 5 }, new Driver() { DriverName = "Pajara", DriverId = 363, VehId = 3 }, new Driver() { DriverName = "Haja", DriverId = 425, VehId = 2 }, new Driver() { DriverName = "Kaj", DriverId = 547, VehId = 4 }, new Driver() { DriverName = "Dajarajines", DriverId = 547, VehId = 1 }, }; // 循环外初始化结果集合,用来累积所有匹配项 List<dynamic> VehDriverList = new List<dynamic>(); foreach (var vehicle in VehicleList) { foreach (var driver in DriverList) { if (vehicle.VehId == driver.VehId) { // 匹配到就往结果集合加,不要中途return // 这里用匿名对象存储,返回的接口数据是键值对结构,更便于前端解析 VehDriverList.Add(new { VehId = vehicle.VehId, VehNum = vehicle.VehNum, DriverId = driver.DriverId, DriverName = driver.DriverName }); } } } // 全部遍历完再判断结果 if (VehDriverList.Count > 0) { return Ok(VehDriverList); } else { return NotFound(); } }
如果确实需要纯数组格式的返回结果,把Add里的匿名对象替换为new List<dynamic> {vehicle.VehId, vehicle.VehNum, driver.DriverId, driver.DriverName}即可。
内容的提问来源于stack exchange,提问作者Gopal P
相关产品推荐
相关产品推荐

