Удаление элемента из списка списков C#
Необходимо удалить элемент двумерного списка, обратившись к элементу по номеру [i,j]. Заранее номер элемента,номер столбца и строки не известны, они получаются в ходе выполнения программы. Пробовала метод Remove, но удаляется столбец списка. Код,который удалось написать,внизу.
namespace ConsoleApp4
{
class Program
{
static void Main(string[] args)
{
// инициализация массива
List<int> K1 = new List<int>() { 2, 7, 1 };
List<int> K2 = new List<int>() { 6, 4, 3 };
List<int> K3 = new List<int>() { 9, 4, 2 }; ;
List<List<int>> mas = new List<List<int>>() { K1, K2, K3 };
for (int i = 0; i < mas.Count; i++)
{
for (int j = 0; j < mas[0].Count; j++)
{
Console.Write(mas[i][j]);
Console.Write(" ");
}
Console.WriteLine();
}
// нахождение минимального элемента в 1-ом столбце
bool f = true;
int min = -1;
int i_min = 0;
for (int m = 0; m < mas.Count; m++)
{
if (f)
{
min = mas[m][0];
i_min = m;
f = false;
}
else
{
if (min > mas[m][0])
{
min = mas[m][0];
i_min = m;
}
}
}
// найденные значения
Console.WriteLine(min);
Console.WriteLine(i_min);
// удаление минимального элемента из первого столбца массива
for (int k = 0; k < mas.Count; k++)
{
if (k == i_min)
{
mas[i_min].RemoveAt(0);
}
}
for (int i = 0; i < mas.Count; i++)
{
for (int j = 0; j < mas[0].Count; j++)
{
Console.Write(mas[i][j]);
Console.Write(" ");
}
Console.WriteLine();
}
Console.ReadKey();
}
}
}
Результат выполнения данного кода должен быть следующим:
7 2
6 4 3
9 4 2
Результат, если использовать mas[i_min].RemoveAt(0);
Первая матрица - начальная, вторым идет элемент,который необходимо удалить и его индекс, в конце итоговый результат.
Ответы (3 шт):
Автор решения: KuzCode
→ Ссылка
Если у вас есть список списков, например, List<List<int>> list и Вы хотите удалить его элемент [i,j], то вы можете написать
list[i].RemoveAt(j);
Автор решения: Igor
→ Ссылка
list[i].RemoveAt(j);
Удаляется столбец
for (int i = 0; i < mas.Count; i++)
{
for (int j = 0; j < mas[i].Count; j++)
{ ^
Автор решения: Nickolay Gureyev
→ Ссылка
// инициализация массива
List<int> K1 = new List<int>() { 2, 7, 1 };
List<int> K2 = new List<int>() { 6, 4, 3 };
List<int> K3 = new List<int>() { 9, 4, 2 }; ;
List<List<int>> mas = new List<List<int>>() { K1, K2, K3 };
for (int i = 0; i < mas.Count; i++)
{
for (int j = 0; j < mas[i].Count; j++) //Вот здесь была ошибка, нужно итерироваться в пределах mas[i].Count, а не mas[0]
{
Console.Write(mas[i][j]);
Console.Write(" ");
}
Console.WriteLine();
}
// нахождение минимального элемента в 1-ом столбце
bool f = true;
int min = -1;
int i_min = 0;
for (int m = 0; m < mas.Count; m++)
{
if (f)
{
min = mas[m][0];
i_min = m;
f = false;
}
else
{
if (min > mas[m][0])
{
min = mas[m][0];
i_min = m;
}
}
}
Console.WriteLine(min);
Console.WriteLine(i_min);
mas[i_min].RemoveAt(min);
for (int i = 0; i < mas.Count; i++)
{
for (int j = 0; j < mas[i].Count; j++)
{
Console.Write(mas[i][j]);
Console.Write(" ");
}
Console.WriteLine();
}
Console.ReadKey();
Теперь все работает