如何用Console.WriteLine打印分号分隔的二维数组[,]并去除末尾分号?
解决二维数组打印时避免末尾多余分号的问题
我来帮你搞定这个二维数组打印的问题,你遇到的末尾多余分号其实是很常见的小问题,给你几个实用的解决思路:
方案一:用String.Join简化代码(推荐)
String.Join本身就会帮你处理元素间的分隔符,不会在最后一个元素后面多加符号,代码简洁又省心。我们可以先把每一行的元素用分号连接,再把所有行用空格拼接起来:
MyType[,] array = new MyType[,] { {item11, item12, item13}, {item21, item22, item23} }; List<string> rowOutputs = new List<string>(); // 遍历每一行 for (int y = 0; y < array.GetLength(0); y++) { List<MyType> currentRow = new List<MyType>(); // 收集当前行的所有元素 for (int x = 0; x < array.GetLength(1); x++) { currentRow.Add(array[y, x]); } // 用分号连接当前行的元素,自动避免末尾分号 rowOutputs.Add(string.Join(";", currentRow)); } // 把所有行的结果用空格连接后打印 Console.WriteLine(string.Join(" ", rowOutputs));
如果你习惯用LINQ,还能把代码写得更紧凑:
using System.Linq; MyType[,] array = new MyType[,] { {item11, item12, item13}, {item21, item22, item23} }; var finalOutput = string.Join(" ", Enumerable.Range(0, array.GetLength(0)) .Select(rowIndex => string.Join(";", Enumerable.Range(0, array.GetLength(1)) .Select(colIndex => array[rowIndex, colIndex])))); Console.WriteLine(finalOutput);
方案二:手动控制循环中的分隔符输出
如果不想用String.Join,也可以调整循环逻辑,只在元素前面加分号(第一个元素除外),这样就不会在末尾多出分号:
MyType[,] array = new MyType[,] { {item11, item12, item13}, {item21, item22, item23} }; for (int y = 0; y < array.GetLength(0); y++) { bool isFirstElementInRow = true; // 这里不要写死x<=8,用array.GetLength(1)获取每行的元素数,适配不同长度的数组 for (int x = 0; x < array.GetLength(1); x++) { if (!isFirstElementInRow) { // 不是第一个元素,先输出分号 Console.Write(";"); } // 输出当前元素 Console.Write(array[y, x]); isFirstElementInRow = false; } // 行与行之间加空格,最后一行后面不要加多余空格 if (y != array.GetLength(0) - 1) { Console.Write(" "); } } // 最后换行 Console.WriteLine();
顺便提下你原有代码的小问题
- 循环里写死了
x <= 8,换成array.GetLength(1)可以让代码适配任意列数的二维数组,更通用; - 每个元素后面都加分号,必然导致最后一个元素多出分隔符,调整分隔符的输出时机就能解决这个问题。
内容的提问来源于stack exchange,提问作者Zaur
相关产品推荐
相关产品推荐

