Лабораторная работа - Работа с коллекциями List на языке C#. ЛР03 - Работа с коллекциями List. Работа с коллекциями типа List
Скачать 200.89 Kb.
|
Лабораторная работаРабота с коллекциями типа List<> Коллекции в C# – это классы, которые содержат множество объектов других классов и предоставляют различные методы работы с этими объектами (добавление, удаление, сортировка, выборка, поиск и т.п.). Количество хранимых объектов коллекциях считается не ограниченным. Существует много классов коллекций, с которыми удобно решать разные задачи. Наиболее часто используемой коллекцией для работы с объектами является обобщенная коллекция List<класс>. Например: List Это коллекция объектов класса Student, т.е. в ней могут храниться только объекты класса Student. Основные методы коллекции описаны в приведенной ниже таблице. Здесь obj – это объект класса, который указан в угловых скобках. У объектов коллекции имеются индексы, по которым можно к ним обращаться: Например: Student std = colStud[2]; Получение объекта, который стоит на 3-ем месте в коллекции. Основные свойства и методы коллекции List<> приведены в таблице:
Задание условий поиска Для использования методов Find(лямбда-выражение) и FindAll(лямбда-выражение) применяются лямбда-выражения. Лямбда-выражения – это краткий способ записи условий отбора объектов коллекции. Рассмотрим запись лямбда-выражения на примерах: требуется выбрать все объекты, у которых свойство Name = «Иванов» и свойство Age > 20 (т.е. имя равно «Иванов», а возраст больше 20): x => x.Name == “Иванов” && x.Age > 20 Здесь x – любое имя (соответствует объектам коллекции), => это обозначение операции «такие, как». нужно выбрать такие объекты, у которых свойство Name = «Иванов» или «Петров» (т.е. имя «Иванов» или имя «Петров»): x => x.Name == “Иванов” || x.Name == “Петров” Задание методов сравнения двух объектов. Для выполнения сортировки объектов коллекции с помощью метода Sort() нужно научить программу сравнивать два объекта. Данный метод принимает в качестве параметров два объекта и возвращает следующее целое число: -1 (минус один), если первый объект должен стоять в отсортированной коллекции раньше второго; 0, если порядок объектов в отсортированной коллекции не важен; +1 (плюс один), если первый объект должен стоять в отсортированной коллекции позже второго. Например: требуется упорядочить объекты класса Student по курсам (вначале студенты первого курса, потом второго и т.д.) public int CompareCourse(Student st1, Student st2) { if(st1.Course < st2.Course) return -1; if(st1.Course == st2.Course) return 0; else return 1; } Если метод сравнения используется в статическом методе, то он сам должен быть статическим: static int CompareCourse(Student st1, Student st2) { ... } Вызов метода сортировки: Sort(CompareCourse); требуется упорядочить объекты класса Student по алфавиту фамилий: public int CompareName(Student st1, Student st2) { int n = st1.Name.CompareTo(st2.Name); return n; } Вызов метода сортировки: Sort(CompareName); Пример программы, работающей с коллекцией List // описание класса Student class Student { public string Name { get; set; } // ФИО студента public int Course { get; set; } // курс студента public int Ocenka { get; set; } // оценка студента } class Program { static void Main(string[] args) { // создаем коллекцию объектов Student List // заносим объекты в коллекцию Student s1 = new Student() { Name = "Аверин", Course = 3, Ocenka = 4 }; StudGrup.Add(s1); StudGrup.Add(new Student() { Name = "Медведев", Course = 2, Ocenka = 3 }); StudGrup.Add(new Student() { Name = "Петров", Course = 3, Ocenka = 5 }); StudGrup.Add(new Student() { Name = "Сидоров", Course = 5, Ocenka = 4 }); StudGrup.Add(new Student() { Name = "Артамонов", Course = 2, Ocenka = 3 }); Show(StudGrup, "Начальное содержание"); // вставляем на 3-е место в коллекции новый объект Student s2 = new Student() { Name = "Цицерон", Course = 5, Ocenka = 5 }; StudGrup.Insert(2, s2); Show(StudGrup, "Вставлен студент Цицерон"); // ищем в коллекции первый объект с фамилией «Сидоров» Student s4 = StudGrup.Find(z => z.Name == "Сидоров"); if (s4 != null) // проверка: такой объект найден? { // удаляем этот объект из коллекции StudGrup.Remove(s4); Show(StudGrup, "Удален студент Сидоров"); } // ищем в коллекции все объекты, у которых оценка равна 5 List Show(studOcenka4, "Студенты с оценкой 5"); // сортировка объектов коллекции по фамилии StudGrup.Sort(CompareName); Show(StudGrup, "Сортировка по фамилии"); // сортировка объектов коллекции по номеру курса StudGrup.Sort(CompareCourse); Show(StudGrup, "Сортировка по курсу"); Console.ReadKey(); } // метод – показывает свойства объектов коллекции static void Show(List { Console.Write("//////////////"); Console.Write(" " + comment + " "); Console.WriteLine("//////////////"); // цикл по объектам коллекции foreach (Student s in col) { Console.Write($"Индекс = {col.IndexOf(s)};"); Console.WriteLine($"Студент: имя {s.Name}, курс {s.Course}, оценка {s.Ocenka}"); } } // метод сравнения объектов класса Student по курсам: static int CompareCourse(Student st1, Student st2) { if (st1.Course < st2.Course) return -1; if (st1.Course == st2.Course) return 0; else return 1; } // метод сравнения объектов класса Student по алфавиту фамилий: static int CompareName(Student st1, Student st2) { // используем стандартный метод сравнения строк по алфавиту int n = st1.Name.CompareTo(st2.Name); return n; } } Результат работы программы: |