Если вы сохраняете их в один и тот же файл, выберите какой-нибудь символ разрыва и напечатайте его после каждого массива, например,
1 2 4
5 6 7
#
0 0
3 4
#
9 9
#
Представляет 3 разных 2d-массива.Затем, когда вы снова читаете данные, читайте строки, пока не наберете символ #
и не закончите текущий 2d массив / не начните новый там.Еще одна вещь, которую вы можете захотеть сделать, это предшествовать каждому массиву с его размерами x / y, например,
2 3
0 0
0 0
0 0
#
. 2 3
говорит нам ожидать массива 2x3.
Чтобы написать что-то вроде этого:
public void Write(List<string[,]> arrays, string filepath)
{
using (StreamWriter sw = new StreamWriter(filepath))
{
foreach(string[,] array in arrays)
{
sw.WriteLine(array.GetLength(0) + " " + array.GetLength(1)); // write dimensions
int i = 0;
while(i < array.GetLength(0))
{
string line = "";
int o = 0;
while(o < array.GetLength(1))
{
line = line + array[i, o];
if(o+1 < array.GetLength(1))
{
line = line + " ";
}
o++;
}
sw.WriteLine(line);
i++;
}
sw.WriteLine("#");
}
}
}
Чтобы прочесть что-то вроде этого, вы получите весь список массивов,
using (StreamReader sr = new StreamReader(filepath))
{
bool inarray = false;
while (!sr.EndOfStream)
{
string s = sr.ReadLine();
List<string> words = s.Split(' ').ToList();
string[,] currentArray = null;
int rowcount = 0;
List<string[,]> arrays = new List<string[,]>();
if (!inarray)
{
// not in an array, check for dimension numbers
int x = 0;
int y = 0;
try
{
x = int.Parse(words[0]);
y = int.Parse(words[1]);
}
catch
{
continue; // couldn't parse it, try the next line
}
inarray = true;
currentArray = new string[x, y];
arrays.Add(currentArray);
rowcount = 0;
}
else
{
// we're in an array
// first check if we've hit the # stop character
if (words[0].Equals("#"))
{
inarray = false;
continue;
}
// otherwise, add this row to the array
int i = 0;
while(i< words.Count)
{
currentArray[i, rowcount] = words[i];
i++;
}
rowcount++;
}
}
}