Добавление элемента в список list - C#
Формулировка задачи:
В список нужно на каждой итерации добавить новый элемент, при этом, сохранить добавленные раннее.
Но здесь почему-то в списке остается только элемент, добавленный на последней итерации. Остальные магическим образом исчезают. Переменная n показывает количество элементов в списке (1), а должно быть 5. Помогите разобраться в чем дело.
Листинг программы
- List<Tuple<int, int>> toDel = new List<Tuple<int, int>>();
- toDel.Add(new Tuple<int, int>(allZero[k - 1].Item2, allZero[k - 1].Item3));
Листинг программы
- 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];
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д