FreddyPR Ответов: 2

Как преобразовать массивы в списки C#


У меня есть несколько массивов для сбора данных из запроса postgreSQL. Данные поступают от радиочастотного приемника, развернутого в полевых условиях. Когда пользователь устанавливает диапазон частот и время запроса, данные отображаются в gridview и передаются оттуда в массивы, обозначенные значением I и значением I+, соответствующим номеру ячейки в столбце, содержащем широту радиочастотного приемника. Эти данные используются для построения диаграмм рассеяния xy, представляющих (частоту, амплитуду), (частоту, полосу пропускания) и т. д. Я хотел бы создать список и объекты вместо использования массивов.

Что я уже пробовал:

dataGridView1.SelectAll();
                    numCells = dataGridView1.SelectedCells.Count;
for (i = 14; i < (numCells); i += 14)
                       
                    {

                        if (i < numCells)
                        {
                            
                            if (Convert.ToDouble(dataGridView1.SelectedCells[i + 11].Value.ToString()) == 28.464258839)
                            {
                                UCS1size += 1;
                            }
                            else if (Convert.ToDouble(dataGridView1.SelectedCells[i + 11].Value.ToString()) == 28.42859146)
                            {
                                MOCsize += 1;
                            }
                            else if (Convert.ToDouble(dataGridView1.SelectedCells[i + 11].Value.ToString()) == 28.490616471)
                            {
                                AMsize += 1;
                            }
                            else if (Convert.ToDouble(dataGridView1.SelectedCells[i + 11].Value.ToString()) == 28.525409911)
                            {
                                UCS2size += 1;
                            }
                            else if (Convert.ToDouble(dataGridView1.SelectedCells[i + 11].Value.ToString()) == 28.560529988)
                            {
                                LC40size += 1;
                            }
                        }

                        else
                        {
                            MessageBox.Show("exiting for loop. numcells: " + numCells);
                        }

                    }
 double[] freqLC40 = new double[LC40size];
                    double[] ampMaxLC40 = new double[LC40size];
                    
                    double[] freqMOC = new double[MOCsize];
                    double[] ampMaxMOC = new double[MOCsize];

                    double[] freqUCS1 = new double[UCS1size];
                    double[] ampMaxUCS1 = new double[UCS1size];


                    double[] freqUCS2 = new double[UCS2size];
                    double[] ampMaxUCS2 = new double[UCS2size];


                    double[] freqAM = new double[AMsize];
                    double[] ampMaxAM = new double[AMsize];


                    int LC40idx = 0;
                    int MOCidx = 0;
                    int UCS1idx = 0;
                    int UCS2idx = 0;
                    int AMsidx = 0;


                    for (i = 14; i < (numCells); i += 14)
                    {

                        if (i < numCells)
                        {
                            if (Convert.ToDouble(dataGridView1.SelectedCells[i + 11].Value.ToString()) == 28.464258839)
                            {
                                freqUCS1[UCS1idx] = Convert.ToDouble(dataGridView1.SelectedCells[i].Value.ToString());
                                ampMaxUCS1[UCS1idx] = Convert.ToDouble(dataGridView1.SelectedCells[i + 9].Value.ToString());
                                UCS1idx += 1;
                            }
                            else if (Convert.ToDouble(dataGridView1.SelectedCells[i + 11].Value.ToString()) == 28.42859146)
                            {
                                freqMOC[MOCidx] = Convert.ToDouble(dataGridView1.SelectedCells[i].Value.ToString());
                                ampMaxMOC[MOCidx] = Convert.ToDouble(dataGridView1.SelectedCells[i + 9].Value.ToString());
                                MOCidx += 1;
                            }
                            else if (Convert.ToDouble(dataGridView1.SelectedCells[i + 11].Value.ToString()) == 28.490616471)
                            {
                                freqAM[AMsidx] = Convert.ToDouble(dataGridView1.SelectedCells[i].Value.ToString());

                                ampMaxAM[AMsidx] = Convert.ToDouble(dataGridView1.SelectedCells[i + 9].Value.ToString());
                                AMsidx += 1;
                            }
                            else if (Convert.ToDouble(dataGridView1.SelectedCells[i + 11].Value.ToString()) == 28.525409911)
                            {
                                freqUCS2[UCS2idx] = Convert.ToDouble(dataGridView1.SelectedCells[i].Value.ToString());
                                ampMaxUCS2[UCS2idx] = Convert.ToDouble(dataGridView1.SelectedCells[i + 9].Value.ToString());
                                UCS2idx += 1;
                            }
                            else if (Convert.ToDouble(dataGridView1.SelectedCells[i + 11].Value.ToString()) == 28.560529988)
                            {
                                freqLC40[LC40idx] = Convert.ToDouble(dataGridView1.SelectedCells[i].Value.ToString());
                                ampMaxLC40[LC40idx] = Convert.ToDouble(dataGridView1.SelectedCells[i + 9].Value.ToString());
                                LC40idx += 1;
                            }

                        }
                        else
                        {
                            MessageBox.Show("exiting for loop. numcells: " + numCells);
                        }

                    }


            //get XY form LC40
            xyForm = new XYplotForm();
            xyForm.Plot(freqLC40, ampMaxLC40, "LC-40 Max Amplitude");
            xyForm.Show();

Maciej Los

Вы должны быть более конкретны и предоставить более подробную информацию о вашем ожидаемом результате!

Philippe Mori

Научитесь писать надежный код...

В этом коде так много плохих вещей, которые сделают его недостижимым. Вы должны избегать жестко закодированных значений и повторяющегося кода, среди прочего.

FreddyPR

Ну, вот почему я пишу. Мне нужен конструктивный совет. Я не программист по профессии, если бы я знал лучше, мне не нужно было бы спрашивать.

2 Ответов

Рейтинг:
13

Andreas Gieriet

В качестве альтернативы вы можете использовать Linq, например

using System.Linq;
...
double[] array = new double[10];
List<double> list = array.ToList();
Овации
Энди


FreddyPR

Большое вам спасибо,разберусь.

Рейтинг:
11

Member 12599256

double[] array = new double[10];
List<double> list = new List<double>(array);


Sergey Alexandrovich Kryukov

Я проголосовал за ответ, он правильный. Возможно, вам лучше не обращать внимания на идиотов, голосующих идиотскими способами; это происходит постоянно...
—СА

Maciej Los

И один голос от меня. А 5!

Andreas Gieriet

И моя тоже. Мои 5!
Овации
Энди

FreddyPR

Спасибо за вклад, применяются и реализацией.