解决List<T[]>分组打印时最后行与下一分组元素混排的问题
问题分析
- 原代码核心问题是跨组复用了计数变量
count和临时列表li,导致上一组未填满的行被下一组元素填充,同时每个组遍历结束后,剩余不足10个的元素没有被打印。 - 代码中未明确定义的
rowCount,推测应为固定值10。
修正后的实现
每个T[]分组独立处理行打印逻辑,确保组内元素完全独立,不会与其他组混排:
foreach (T[] group in groups) { // 每个组单独初始化临时列表,避免跨组污染 List<T> currentLineItems = new List<T>(); // 每个组单独维护行内元素计数,从0开始 int itemCountInLine = 0; foreach (T item in group) { currentLineItems.Add(item); itemCountInLine++; // 一行满10个时打印并重置 if (itemCountInLine == 10) { string line = string.Join("\t", currentLineItems); Console.WriteLine(line); currentLineItems.Clear(); itemCountInLine = 0; } } // 打印当前组最后一行不足10个的剩余元素 if (currentLineItems.Count > 0) { string line = string.Join("\t", currentLineItems); Console.WriteLine(line); } }
关键改进点
- 将临时列表和行内计数变量移至分组循环内部,每个组独立初始化,彻底隔离不同组的打印逻辑。
- 新增组内剩余元素处理逻辑,确保不足10个的最后一行能被正常打印。
- 用更简洁的
foreach遍历组内元素,替代原有的do-while循环,提升代码可读性。
内容的提问来源于stack exchange,提问作者LittleSteps
相关产品推荐
相关产品推荐

