Главная страница
Навигация по странице:

  • Задание условий поиска Для использования методов Find(лямбда-выражение) и FindAll(лямбда-выражение) применяются лямбда-выражения

  • Задание методов сравнения двух объектов.

  • Пример программы, работающей с коллекцией List

  • Результат работы программы

  • Лабораторная работа - Работа с коллекциями List на языке C#. ЛР03 - Работа с коллекциями List. Работа с коллекциями типа List


    Скачать 200.89 Kb.
    НазваниеРабота с коллекциями типа List
    АнкорЛабораторная работа - Работа с коллекциями List на языке C
    Дата16.02.2022
    Размер200.89 Kb.
    Формат файлаdocx
    Имя файлаЛР03 - Работа с коллекциями List.docx
    ТипЛабораторная работа
    #363839
    страница1 из 4
      1   2   3   4

    Лабораторная работа


    Работа с коллекциями типа List<>
    Коллекции в C# – это классы, которые содержат множество объектов других классов и предоставляют различные методы работы с этими объектами (добавление, удаление, сортировка, выборка, поиск и т.п.). Количество хранимых объектов коллекциях считается не ограниченным.

    Существует много классов коллекций, с которыми удобно решать разные задачи. Наиболее часто используемой коллекцией для работы с объектами является обобщенная коллекция List<класс>.

    Например:

    List colStud = new List();

    Это коллекция объектов класса Student, т.е. в ней могут храниться только объекты класса Student.

    Основные методы коллекции описаны в приведенной ниже таблице. Здесь obj – это объект класса, который указан в угловых скобках. У объектов коллекции имеются индексы, по которым можно к ним обращаться:

    Например: Student std = colStud[2];

    Получение объекта, который стоит на 3-ем месте в коллекции.
    Основные свойства и методы коллекции List<> приведены в таблице:


    Основные свойства

    и методы

    Пояснение

    int Count

    Количество объектов в коллекции.

    [i]

    Получить объект, стоящий на i-ом месте.

    Add(obj)

    Добавить элемент к коллекции.

    Insert(ind, obj)

    Вставить объект в коллекцию на место с индексом ind (номер индекса начинается с нуля).

    Remove(obj)

    Удалить объект obj из коллекции. Последующие объекты меняют индексы.

    bool Contains(obj)

    Проверяет: есть ли в коллекции объект obj (возвращает true, если – есть, иначе false).

    int IndexOf(obj)

    Определяет место, на котором стоит объект obj в коллекции.

    Find(лямбда-выражение)

    Ищет первый объект, который удовлетворяет условию.

    Например: x => x.Ocenka == 4

    FindAll(лямбда-выражение)

    Создается новая коллекция, которая включает все объекты, соответствующие условиям отбора

    Sort(метод сравнения объектов)

    Упорядочивает объекты в соответствии с методом, имя которого передается.

    Reverse()

    Переставляет объекты коллекции в обратном порядке.


    Задание условий поиска

    Для использования методов Find(лямбда-выражение) и FindAll(лямбда-выражение) применяются лямбда-выражения.

    Лямбда-выражения – это краткий способ записи условий отбора объектов коллекции.

    Рассмотрим запись лямбда-выражения на примерах:

    1. требуется выбрать все объекты, у которых свойство Name = «Иванов» и свойство Age > 20 (т.е. имя равно «Иванов», а возраст больше 20):


    x => x.Name == “Иванов” && x.Age > 20
    Здесь

    • x – любое имя (соответствует объектам коллекции),

    • => это обозначение операции «такие, как».




    1. нужно выбрать такие объекты, у которых свойство 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 StudGrup = new 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 studOcenka4 = StudGrup.FindAll(x => x.Ocenka == 5);

    Show(studOcenka4, "Студенты с оценкой 5");
    // сортировка объектов коллекции по фамилии

    StudGrup.Sort(CompareName);

    Show(StudGrup, "Сортировка по фамилии");
    // сортировка объектов коллекции по номеру курса

    StudGrup.Sort(CompareCourse);

    Show(StudGrup, "Сортировка по курсу");

    Console.ReadKey();

    }
    // метод – показывает свойства объектов коллекции

    static void Show(List col, string comment)

    {

    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;

    }

    }
    Результат работы программы:


      1   2   3   4


    написать администратору сайта