2013-12-16 4 views
5

У меня есть файл file.txt со следующим:Как преобразовать массив jagged в 2D массив?

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

Как бы я сделать то же самое, но с 2D-массив?

+4

и проблема является..? –

+1

как писать этот код с 2D-массивом, это проблема .. –

+1

Почему бы вам просто не прочитать его в 2D-массиве на первом месте? –

ответ

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

спасибо p.s.w.g :) Я понимаю, мне не нужно. ToArray(); –

+0

'for (var j = 0; j Amichai

+0

@Amichai Вы правы. Спасибо за исправление! –

Смежные вопросы