如何合并不定数量的Ticket数组 解决仅返回最后选中分类数据问题
问题原因
- 原有代码每次选中合法分类时直接对
Tickets变量赋值,会覆盖上一次选中分类的试题数据,仅保留最后一次的结果 - 逻辑变量
getTicks冗余且逻辑错误,第一次选中合法分类后就设为false,但后续还需要继续处理剩余分类的输入,该变量无存在意义
实现方案
用临时集合存储所有选中分类的试题,循环结束后统一转换为数组返回即可,同时修正了分类ID合法性判断的边界问题(原有判断漏了ID等于分类长度的越界场景,假设分类ID从0开始计数)
修改后代码
public Ticket[] GetTickets(int numOfCat) { // 初始化临时集合存储所有选中的试题 List<Ticket> allTickets = new List<Ticket>(); Console.WriteLine(DrivingLicenceStorage.Categories.Length); for (int i = 0; i < numOfCat; i++) { Console.Write($"Enter category N{i + 1}: "); var categoryId = Convert.ToInt32(Console.ReadLine()); // 修正边界判断,ID从0开始时大于等于分类总数就属于非法输入 if (categoryId < 0 || categoryId >= DrivingLicenceStorage.Categories.Length) { Console.WriteLine("Invalid Input"); Console.WriteLine("Try Again"); i--; continue; } // 将当前分类的所有试题添加到临时集合 allTickets.AddRange(DrivingLicenceStorage.Categories.ElementAt(categoryId).Tickets); } // 可选:如果需要对试题去重可调用Distinct(),前提是Ticket类已实现相等性比较逻辑 // return allTickets.Distinct().ToArray(); return allTickets.ToArray(); }
内容的提问来源于stack exchange,提问作者ninia sabadze
相关产品推荐
相关产品推荐

