Home > DeveloperSection > Forums > How to convert jagged array to 2D array?
Royce Roy
Royce Roy

Total Post:134

Points:938
Posted on    December-17-2013 1:18 AM

 C# C# 
Ratings:


 1 Reply(s)
 1223  View(s)
Rate this:

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?



Pravesh Singh

Total Post:411

Points:2881
Posted on    December-17-2013 1:45 AM

Hi Royce,

 

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[j].Length; j++)

    {

        arr2[i, j] = arr[i][j];

    }

}

 

Thanks


Modified On Aug-11-2016 05:17:07 AM

Don't want to miss updates? Please click the below button!

Follow MindStick