То, что преподают в институте зачастую весьма просто и тривиально и плохо соотносится с кодом и решениями в реальных приложениях. Поэтому, я счел, что нелишним будет знакомство читателя с реальными трудностями с которыми я столкнулся, так сказать real world examples.
Начну с самого, казалось бы, простого - с массивов. Недавно работая над научной работой наткнулся на интересную вещь: необходимо было создать в C# трехмерный массив, причем две из трех его размерностей должны быть динамическими. И избежать этого никак было нельзя.
Как оказалось решение весьма просто - если раньше в C++ для работы с динамическими массивами использовались шаблоны библиотеки STL и работа с трехмерным указателем на массив не предвещала ровным счетом ничего хорошего, то теперь на C# объявление и использование такого массива оказывается весьма прстым и тривиальным:
Немного подумав я пришел в итоге к следующему объявлению:
Начну с самого, казалось бы, простого - с массивов. Недавно работая над научной работой наткнулся на интересную вещь: необходимо было создать в C# трехмерный массив, причем две из трех его размерностей должны быть динамическими. И избежать этого никак было нельзя.
Как оказалось решение весьма просто - если раньше в C++ для работы с динамическими массивами использовались шаблоны библиотеки STL и работа с трехмерным указателем на массив не предвещала ровным счетом ничего хорошего, то теперь на C# объявление и использование такого массива оказывается весьма прстым и тривиальным:
Немного подумав я пришел в итоге к следующему объявлению:
.....
/// <summary>
/// declare inner List
/// </summary>
private List<double> _arr;
/// <summary>
/// declare main List
/// </summary>
public static List<List<double>>[] Arr;
.....
Инициализация получилась также нетривиальной:
/// <summary>
/// initialize List and array
/// </summary>
private void init()
{
N = (int)numericUpDown1.Value;
Arr= new List<List<double>>[N];
for (int i = 0; i < N; i++)
{
Arr[i] = new List<List<double>>();
}
}
.....
.....
// Где-то в коде:_arr = new List<double>();Еще дальше:
_arr.Add(some_value);
.....X[counter].Add(_x);
Y[counter].Add(_y);
t[counter].Add(_t);
Использовать массивы можно как всегда, не забывая только про правильную индексацию:
for (byte i = 0; i < Arr.Length; i++)
for (byte j = 0; j < Arr[i].Count; j++)
for (byte k = 0; k < Arr[i][j].Count - 1; k++)
.......
Arr[i][j][k];
1 комментарий:
клёвые статьи, зря перестали писать =) случайно наткнулся. думаю, просто сложно найти блог и лень оставлять комменты - лично я никогда не комментриую ничего.
Отправить комментарий