Удаление элемента из списка списков 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();

Теперь все работает

→ Ссылка