Добавление элемента в список list - C#

Узнай цену своей работы

Формулировка задачи:

В список нужно на каждой итерации добавить новый элемент, при этом, сохранить добавленные раннее.
 List<Tuple<int, int>> toDel = new List<Tuple<int, int>>();
toDel.Add(new Tuple<int, int>(allZero[k - 1].Item2, allZero[k - 1].Item3));
Но здесь почему-то в списке остается только элемент, добавленный на последней итерации. Остальные магическим образом исчезают. Переменная n показывает количество элементов в списке (1), а должно быть 5. Помогите разобраться в чем дело.
 for (int x = 0; x < 5; x++)
            {
                GetMinstr(matrix);
                GetRowReduction(matrix);
                GetMinstolb(matrix);
                GetReductionCollumn(matrix);
                ShowMasInDataGrid(dataGridView1, matrix);
 
                List<Tuple<int, int, int>> allZero = new List<Tuple<int, int, int>>();
                int rowCount = matrix.GetLength(0);
                int collumnCount = matrix.GetLength(1);
                for (int i = 0; i < rowCount; i++)
                    for (int j = 0; j < collumnCount; j++)
                        
                        if (matrix[i, j] != 500)
                            if (matrix[i, j] == 0)
                            {
                                int minIValue = Int32.MaxValue;
                                int minI = Int32.MaxValue;
                                int minJValue = Int32.MaxValue;
                                int minJ = Int32.MaxValue;
 
                                for (int a = 0; a < collumnCount; a++)
                                {
                                    
                                    if (matrix[a, j] < minIValue && a != i) minIValue = matrix[a, j];
                                    minI = a;
                                }
 
                                for (int a = 0; a < collumnCount; a++)
                                {
                                    if (matrix[i, a] < minJValue && a != j) minJValue = matrix[i, a];
                                    minJ = a;
                                }
 
                                allZero.Add(new Tuple<int, int, int>(minIValue + minJValue, i, j));
                            }
                int k;
                k = allZero.Count;
                listBox1.Items.Add(k);
                 allZero.Sort((a, b) => a.Item1.CompareTo(b.Item1));
//ВОТ ЭТОТ СПИСОК
                 List<Tuple<int, int>> toDel = new List<Tuple<int, int>>();
              List<Tuple<int, int>> optim = new List<Tuple<int, int>>();
//ДОБАВЛЯЮ ЭЛЕМЕНТ
                toDel.Add(new Tuple<int, int>(allZero[k - 1].Item2, allZero[k - 1].Item3));
                optim.Add(new Tuple<int, int>(allZero[k - 1].Item2, allZero[k - 1].Item3));
                int z = optim.Count;
 //Удаление
                int n = toDel.Count; //КОЛИЧЕСТВО ЭЛЕМЕНТОВ В СПИСКЕ
                for (int i = 0; i < collumnCount; i++)
                {
                    for (int j = 0; j < rowCount; j++)
                    {
                        if (i == toDel[n - 1].Item1) matrix[i, j] = 500;
                        if (j == toDel[n - 1].Item2) matrix[i, j] = 500;
                        matrix[toDel[n - 1].Item2, toDel[0].Item1] = matrix[0, 0];
                    }
                }
                for (int i = 0; i < rowCount; ++i)
                {
                   
                    List<string> aa = allZero.Select(t => t.ToString()).ToList();
                    List<string> bb = toDel.Select(t => t.ToString()).ToList();
                    //List<string> cc = toDel.Select(t => t.ToString()).ToList();

                    label1.Text = string.Join(" ", aa);
                    label2.Text = string.Join(" ", bb); //ПОКАЗЫВАЮ СПИСОК В ЛЕЙБЛЕ. ТАМ ВСЕГО ОДИН КОРТЕЖ
                     label3.Text = string.Join(" ", n);// КОЛИЧЕСТВО ЭЛЕМЕНТОВ В СПИСКЕ =1. ПОЧЕМУ?

                }
            }

Решение задачи: «Добавление элемента в список list»

textual
Листинг программы
 public static int[] GetMinstr(int[,] matrixa)
        {
            int rowCount = matrixa.GetLength(0);
            int collumnCount = matrixa.GetLength(1);
            int[] minstr = new int[5];
            
            //Нахождение минимума по строкам
            for (int i = 0; i < rowCount; ++i)
            {
 
                int  minRow = matrixa[0, 0];
               
                for (int j = 0; j < collumnCount; ++j)
                { if (matrixa[i, j] != 500) {
                        if (minRow > matrixa[i, j]) minRow = matrixa[i, j];
                    }
                }
 
                minstr[i] = minRow;
            }
            return minstr;
        }
        public static void  GetRowReduction(int[,] matrixa)
        {
 
            //Редукция строк
 
            int rowCount = matrixa.GetLength(0);
            int collumnCount = matrixa.GetLength(1);
            int[] b = GetMinstr(matrixa);
 
            for (int i = 0; i < rowCount; ++i)
            {
 
                for (int j = 0; j < collumnCount; ++j)
                {
                    if (matrixa[i, j] != 500) {
                        matrixa[i, j] = matrixa[i, j] - b[i]; }
 
               }
 
            }
            
        }
 
        public static int[] GetMinstolb(int[,] matrixa)
        {
            //List<int> minstolb = new List<int>();
            int rowCount = matrixa.GetLength(0);
            int collumnCount = matrixa.GetLength(1);
            int[] minstolb = new int[5];
            
            //Нахождение минимума по стролбцам
            for (int i = 0; i < rowCount; ++i)
            {
                int minCol = matrixa[0, 0];
                for (int j = 0; j < collumnCount; ++j)
                {
                    if (matrixa[j, i] != 500) {
                        if (minCol > matrixa[j, i]) minCol = matrixa[j, i];
                    }
 
                }
                minstolb[i] = minCol;
 
            }
            return minstolb;
        }
 
        public static void GetReductionCollumn(int[,] matrixa)
        {
            //List<int> minstolb = new List<int>();
            int rowCount = matrixa.GetLength(0);
            int collumnCount = matrixa.GetLength(1);
            int [] a = GetMinstolb(matrixa);
 
            //Редукция столбцам
            for (int i = 0; i < 5; ++i)
            {
 
                for (int j = 0; j < 5; ++j)
                {
                    if (matrixa[i, j] != 500) {
                        matrixa[i, j] = matrixa[i, j] - a[j];
                    }
 
                }
 
            }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.5 из 5