Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to convert jagged array to 2D array?

I have a file file.txt with the following:

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

And this code to read it and feed it to a jagged array:

    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();
    }

How would I do the same thing, but with a 2D array?

like image 675
Gia Nebieridze Avatar asked Dec 16 '13 15:12

Gia Nebieridze


1 Answers

Assuming you know the dimensions of your 2D array (or at least the maximum dimensions) before you start reading the file, you can do something like this:

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];
    }
}

If you don't know the dimensions, or if the number of integers on each line may vary, your current code will work, and you can use a little Linq to convert the array after you've read it all in:

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];
    }
}
like image 128
p.s.w.g Avatar answered Nov 06 '22 16:11

p.s.w.g