如何将不规则数组转换为二维数组?

5

我有一个名为file.txt的文件,其中包含以下内容:

6,73,6,71 
32,1,0,12 
3,11,1,134 
43,15,43,6 
55,0,4,12 

然后使用以下代码读取并将其输入到交错数组中:

    string[][] arr = new string[5][];
    string[] filelines = File.ReadAllLines("file.txt");
    for (int i = 0; i < filelines.Length; i++) 
    {
        arr[i] = filelines[i].Split(',').ToArray();
    }

我该如何使用二维数组来完成相同的操作?


4
问题是什么? - Jeroen Vannevel
1
如何使用二维数组编写此代码,这是问题。 - Gia Nebieridze
1
为什么你不一开始就不把它读入到2D数组中呢? - Konrad Kokosa
1个回答

5
假设在读取文件之前,您已经了解了2D数组(或至少是最大维度)的尺寸,您可以按以下方式处理:
string[,] arr = new string[5,4];
string[] filelines = File.ReadAllLines("file.txt");
for (int i = 0; i < filelines.Length; i++) 
{
    var parts = filelines[i].Split(',');    // Note: no need for .ToArray()
    for (int j = 0; j < parts.Length; j++) 
    {
        arr[i, j] = parts[j];
    }
}

如果您不知道数组的维度或每行整数的数量可能会有所变化,则当前代码将起作用,您可以使用一点Linq在读取所有内容后转换数组:

string[] filelines = File.ReadAllLines("file.txt");
string[][] arr = new string[filelines.Length][];
for (int i = 0; i < filelines.Length; i++) 
{
    arr[i] = filelines[i].Split(',');       // Note: no need for .ToArray()
}

// now convert
string[,] arr2 = new string[arr.Length, arr.Max(x => x.Length)];
for(var i = 0; i < arr.Length; i++)
{
    for(var j = 0; j < arr[i].Length; j++)
    {
        arr2[i, j] = arr[i][j];
    }
}

谢谢 p.s.w.g :) 我明白了,我不需要使用 .ToArray(); - Gia Nebieridze
for(var j = 0; j < arr[j].Length; j++) 应该改为 for(var j = 0; j < arr[i].Length; j++) - arr[i] - Amichai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接