在C#中,字符串数组(string[])是一个一维数组,其中每个元素都是一个字符串。而二维字符数组(char[,])是一个矩阵结构,可以表示表格形式的数据。将字符串数组转换为二维字符数组意味着将每个字符串转换为字符数组,并将这些字符数组组合成一个二维结构。
以下是几种将字符串数组转换为二维字符数组的方法:
public static char[,] ConvertStringArrayTo2DCharArray(string[] stringArray)
{
if (stringArray == null || stringArray.Length == 0)
return new char[0, 0];
// 确定二维数组的行数和列数
int rows = stringArray.Length;
int cols = stringArray.Max(s => s.Length);
char[,] result = new char[rows, cols];
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < stringArray[i].Length; j++)
{
result[i, j] = stringArray[i][j];
}
// 填充剩余位置(如果字符串长度小于最大长度)
for (int j = stringArray[i].Length; j < cols; j++)
{
result[i, j] = '\0'; // 或者使用其他默认字符如 ' '
}
}
return result;
}
public static char[,] ConvertStringArrayTo2DCharArrayLinq(string[] stringArray)
{
if (stringArray == null || stringArray.Length == 0)
return new char[0, 0];
int rows = stringArray.Length;
int cols = stringArray.Max(s => s?.Length ?? 0);
char[,] result = new char[rows, cols];
Enumerable.Range(0, rows).ToList().ForEach(i =>
{
Enumerable.Range(0, stringArray[i]?.Length ?? 0).ToList().ForEach(j =>
{
result[i, j] = stringArray[i][j];
});
});
return result;
}
string[] strings = { "Hello", "World", "CSharp" };
char[,] charArray = ConvertStringArrayTo2DCharArray(strings);
// 打印结果
for (int i = 0; i < charArray.GetLength(0); i++)
{
for (int j = 0; j < charArray.GetLength(1); j++)
{
Console.Write(charArray[i, j] == '\0' ? ' ' : charArray[i, j]);
}
Console.WriteLine();
}
如果需要更灵活的结构(每行可以有不同长度),可以考虑使用交错数组(数组的数组):
public static char[][] ConvertStringArrayToJaggedCharArray(string[] stringArray)
{
if (stringArray == null)
return null;
char[][] result = new char[stringArray.Length][];
for (int i = 0; i < stringArray.Length; i++)
{
result[i] = stringArray[i]?.ToCharArray() ?? new char[0];
}
return result;
}
这种转换在以下场景中很有用:
以上方法提供了完整的解决方案,可以根据具体需求选择最适合的实现方式。