Коллекции

Вот задание: Дан список иногородних студентов из n человек: ФИО, адрес (город, улица, дом-квартира), приблизительное расстояние до Краснодара. Для них в общежитии выделено k мест. Вывести очередь студентов, которых необходимо селить в общежитие в первую очередь. Критерий отбора: расстояние до города.
Вот код:

    // класс реализует интерфейс IComparable
    class Student : IComparable
    {
        public string FIO { get; set; } // фамилия, имя, отчество
        public string Adress { get; set; } // адрес
        public int Rasstoianie { get; set; } // расстояние до Краснодара
        // конструктор класса
        public Student(string FIO, string Adress, int Rasstoianie) 
        {
            this.FIO = FIO;
            this.Adress = Adress;
            this.Rasstoianie = Rasstoianie;
        }
        // установить способ сравнения расстояния
        public int CompareTo(object obj)
        {
            // преобразование параметра obj к типу точки
            Student p = (Student)obj;
            if (Rasstoianie > p.Rasstoianie) // сравнение расстояния
                return 1; // возвращается либо положительное,
            if (Rasstoianie == p.Rasstoianie)
                return 0; // либо нулевое,
            return -1; // либо отрицательное значение
        }
    }

Форма:

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        ArrayList ishod, res; // объявление динамических массивов

        private void Form1_Load(object sender, EventArgs e)
        {
            ishod = new ArrayList(); // выделение памяти
            res = new ArrayList();
        }

        private void button2_Click(object sender, EventArgs e) // кнопка узнать
        {
            // ТУТ НЕ ЗНАЮ, ЧТО ПИСАТЬ!
        }

        private void button1_Click(object sender, EventArgs e) // кнопка добавить
        {
            string FIO = (string)textBox_FIO.Text; // берем значение из текстбоксов
            string Adress = (string)textBox_Adress.Text;
            int Rasstoianie = (int)numericUpDown_Rasstoianie.Value; 
            Student p = new Student(FIO, Adress, Rasstoianie); // добавляем данные
            ishod.Add(p); // добавляем в коллекцию
            dataGridView1.Rows.Add(p.FIO, p.Adress, p.Rasstoianie); // добавляем в таблицу на форме

        }
    }

Мне нужно в форме вводить ФИО студента, его адрес и расстояние до Краснодара в текстбоксы и после все, что было введено добавляется в таблицу(Это все у меня сделано). Затем необходимо отсортировать эту таблицу по расстоянию, сделать это нужно в кнопке “Узнать”(button2), именно это и вызвало затруднение, не знаю, как реализовать.
Пробовал так, но не работает:

        private void button2_Click(object sender, EventArgs e) // кнопка узнать
        {
            Student skt = new Student("", "", 0);
            skt = (Student)ishod[0];
            int min = skt.Rasstoianie;
            int ind = 0;
            dataGridView2.Rows.Clear();
            foreach (Student p in res)
            {
                if (p.Rasstoianie < min)
                {
                    min = p.Rasstoianie;
                    ind = ishod.IndexOf(p);
                }
            }
            skt = (Student)ishod[ind];
            dataGridView2.Rows.Add(skt);
            
            
        }

Этого цикла явно недостаточно, чтоб отсортировать произвольный список. Смотрите любой алгоритм сортировки в википедии )
Но лучше вызвать стандартную функцию сортировки языка/фреймворка. List<T>.Sort Method (System.Collections.Generic) | Microsoft Docs

1 лайк