Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Windows Forms
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2022, 17:10   #1
Radon33
Пользователь
 
Регистрация: 22.10.2021
Сообщений: 34
По умолчанию Сортировка List C#

Подскажите, как отсортировать список.
Вот задание: Дан список иногородних студентов из 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();
            //Тут нужна сортировка 
            skt = (Student)ishod[ind];
            dataGridView2.Rows.Add(skt);
            
            
        }
Radon33 вне форума Ответить с цитированием
Старый 17.05.2022, 20:47   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Ну, для сортировки ArrayList, на удивление, есть метод Sort:
https://docs.microsoft.com/ru-ru/dot...arraylist-sort
Видимо:
Код:
ishod.Sort();
pu4koff вне форума Ответить с цитированием
Старый 19.05.2022, 08:04   #3
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Можно и без IComparable обойтись чтобы не было жесткой привязки к полям.

Код:
data.Sort((a, b) => a.Rasstoianie.CompareTo(b.Rasstoianie));
Например:

Код:
Random random = new Random();
            List<Student> data = Enumerable.Range(0, 10).ToArray().Select(v => new Student("stud_" + v.ToString(), "abirvalg", random.Next(5000))).ToList();

            foreach (var stud in data)
            {
                Console.WriteLine(stud.FIO + ";   Rastoanie = " + stud.Rasstoianie);
            }

            Console.WriteLine("sorting ...");
            data.Sort((a, b) => a.Rasstoianie.CompareTo(b.Rasstoianie));


            foreach (var stud in data)
            {
                Console.WriteLine(stud.FIO + ";   Rastoanie = " + stud.Rasstoianie);
            }
Изображения
Тип файла: png img.png (15.0 Кб, 8 просмотров)
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка List C# Filaind Помощь студентам 1 16.07.2015 00:58
Сортировка экземпляра List zakaev C# (си шарп) 2 01.11.2011 19:54
Сортировка List по одному или нескольким полям imissyouso Общие вопросы по Java, Java SE, Kotlin 1 17.09.2010 16:33
Сортировка List, по содержимому. Casper-SC Общие вопросы .NET 1 21.07.2010 12:21
(STL LIST SORT) Сортировка по некольким критериям htatsu Общие вопросы C/C++ 4 19.07.2009 01:44