Coder Social home page Coder Social logo

cshrpthirdlab's Introduction

cShrpThirdLab

Лабораторная работа 3. Варианты второго уровня Универсальные типы. Классы-коллекции. Методы расширения класса System.Linq.Enumerable Информация для всех вариантов Во всех вариантах второго уровня требуется определить универсальный делегат delegate System.Collections.Generic.KeyValuePair<TKey,TValue> GenerateElement<TKey, TValue>(int j); и универсальный класс TestCollections<TKey,TValue>, который содержит закрытые поля следующих типов  System.Collections.Generic.List;  System.Collections.Generic.List ;  System.Collections.Generic.Dictionary<TKey, TValue> ;  System.Collections.Generic.Dictionary<string, TValue>;  GenerateElement<TKey, TValue>. Конкретные значения типовых параметров TKey и TValue зависят от варианта. В конструкторе класса TestCollections<TKey,TValue> создаются коллекции с заданным числом элементов. Надо сравнить время поиска элемента в коллекциях-списках List и время поиска элемента по ключу и элемента по значению в коллекциях-словарях Dictionary<TKey,TValue>. Для автоматической генерации элементов коллекций надо определить метод, который принимает один целочисленный параметр типа int и возвращает ссылку на объект типа KeyValuePair<TKey,TValue>. Метод должен инициализировать объекты KeyValuePair<TKey,TValue> так, чтобы соответствие между номером элемента и объектом TKey в паре ключ-значение было взаимно-однозначным. Метод для автоматической генерации элементов коллекций передается в класс TestCollections<TKey,TValue> через параметр конструктора класса. Для этого в классе TestCollections<TKey,TValue> надо определить конструктор c двумя параметрами, имеющими тип int и GenerateElement. Через целочисленный параметр объектам класса передается число элементов в коллекциях, через экземпляр делегата GenerateElement – метод, который используется для автоматической генерации пары ключ-значение в виде объекта KeyValuePair<TKey,TValue>.

Число элементов в коллекциях пользователь вводит в процессе работы приложения. Если при вводе была допущена ошибка, приложение должно обработать исключение, сообщить об ошибке ввода и повторить прием ввода до тех пор, пока не будет правильно введено целочисленное значение. Для четырех разных элементов – первого, центрального, последнего и элемента, не входящего в коллекцию, – надо измерить время поиска  элемента в коллекциях List и List с помощью метода Contains;  элемента по ключу в коллекциях Dictionary< TKey, TValue> и Dictionary <string, TValue > с помощью метода ContainsKey;  значения элемента в коллекции Dictionary< TKey, TValue > с помощью метода ContainsValue. Так как статический метод для автоматической генерации элементов должен обеспечивать взаимно-однозначное соответствие между значением целочисленного параметра метода и объектами TKey, его можно использовать как при создании коллекций, так и для генерации элемента для поиска.

Вариант 2. Требования к программе Определить новые версии классов Article, Edition и Magazine из лабораторной работы 2. В класс Article добавить реализации интерфейсов  System.IComparable для сравнения объектов типа Article по названию статьи;  System.Collections.Generic.IComparer

для сравнения объектов типа Article по фамилии автора. Определить вспомогательный класс, реализующий интерфейс System.Collections.Generic.IComparer, который можно использовать для сравнения объектов типа Article по рейтингу статьи. В новой версии класса Magazine использовать типы  System.Collections.Generic.List для списка редакторов журнала;  System.Collections.Generic.List для списка статей в журнале. В новых версиях Edition и Magazine сохранить все остальные поля, свойства и методы из предыдущей версии класса, внести необходимые исправления в код свойств и методов из-за изменения типов полей для списка редакторов журнала и списка статей. В классе Magazine определить методы для сортировки списка статей  по названию статьи;  по фамилии автора;  по рейтингу статьи. Определить универсальный делегат delegate TKey KeySelector(Magazine mg); Определить универсальный класс MagazineCollection, содержащий коллекцию объектов типа Magazine, в котором для хранения коллекции используется тип System.Collections.Generic.Dictionary<TKey, Magazine>. Типовой параметр TKey универсального класса MagazineCollection определяет тип ключа в коллекции Dictionary<TKey, Magazine>. Метод, который используется для вычисления ключа при добавлении элемента Magazine в коллекцию класса MagazineCollection, отвечает делегату KeySelector и передается MagazineCollection через параметр единственного конструктора класса. Класс MagazineCollection содержит

 закрытое поле типа System.Collections.Generic.Dictionary<TKey, Magazine>;  закрытое поле типа KeySelector для хранения экземпляра делегата с методом, вычисляющим ключ для объекта Magazine;  конструктор c одним параметром типа KeySelector ;  метод void AddDefaults(), c помощью которого можно добавить некоторое число элементов типа Magazine для инициализации коллекции по умолчанию;  метод void AddMagazines ( params Magazine[] ) для добавления элементов в коллекцию Dictionary<TKey, Magazine>;  перегруженную версию виртуального метода string ToString() для формирования строки, содержащей информацию обо всех элементах коллекции Dictionary<TKey, Magazine>, в том числе значения всех полей, включая список редакторов издания и список статей в журнале для каждого элемента Magazine;  метод string ToShortString(), который формирует строку с информацией обо всех элементах коллекции Dictionary<TKey, Magazine>, содержащую значения всех полей, значение среднего рейтинга статей, число редакторов издания и число статей в журнале для каждого элемента Magazine, но без списков редакторов и статей. В классе MagazineCollection определить свойства и методы, выполняющие операции со словарем Dictionary<TKey, Magazine> с использованием методов расширения класса System.Linq.Enumerable и статические методы-селекторы, которые необходимы для выполнения соответствующих операций с коллекцией:  свойство типа double (только с методом get), возвращающее максимальное значение среднего рейтинга статей для элементов коллекции; если в коллекции нет элементов, свойство возвращает некоторое значение по умолчанию; для поиска максимального значения среднего рейтинга статей надо использовать метод Max класса System.Linq.Enumerable;  метод IEnumerable<KeyValuePair<TKey,Magazine>>FrequencyGroup(Frequency value), возвращающий подмножество элементов коллекции Dictionary<TKey,Magazine> с заданной периодичностью выхода журнала; для формирования подмножества использовать метод Where класса System.Linq.Enumerable;  свойство типа IEnumerable<IGrouping<Frequency,KeyValuePair<TKey,Magazine >>> (только с методом get), выполняющее группировку элементов коллекции

Dictionary<TKey, Magazine> в зависимости от периодичности выхода журнала с помощью метода Group класса System.Linq.Enumerable. В методе Main()

  1. Создать объект Magazine и вызвать методы, выполняющие сортировку списка List статей в журнале по разным критериям, после каждой сортировки вывести данные объекта. Выполнить сортировку  по названию статьи;  по фамилии автора;  по рейтингу статьи.
  2. Создать объект MagazineCollection. Добавить в коллекцию несколько разных элементов типа Magazine и вывести объект MagazineCollection.
  3. Вызвать методы класса MagazineCollection, выполняющие операции с коллекцией-словарем Dictionary<TKey, Magazine>, и после каждой операции вывести результат операции. Выполнить  вычисление максимального значения среднего рейтинга статей для элементов коллекции;  вызвать метод FrequencyGroup для выбора журналов с заданной периодичностью выхода;  вызвать свойство класса, выполняющее группировку элементов коллекции по периодичности выхода; вывести все группы элементов.
  4. Создать объект типа TestCollection<Edition, Magazine>. Ввести число элементов в коллекциях и вызвать метод для поиска первого, центрального, последнего и элемента, не входящего в коллекции. Вывести значения времени поиска для всех четырех случаев.

cshrpthirdlab's People

Contributors

egorioch avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.