Г. Шилдт - С# 3.0 Полное руководство. 2010 (1160798), страница 171
Текст из файла (страница 171)
Напомним, что 1Р1сс1опагуеппщегагог — зто перечисли- тель, используемый для перечисления содержимого коллекции, в которой хранятся пары "ключ — значение". И наконец, для получения синхронизированной оболочки, в которую заключается коллекция типа Боггес)11яг, вызывается метод Бупспгоп1гес) () . Таблица 24.6. Наиболее употребительные методы, определенные в классе ВогвесП,1вС Описание риЫ1с чгггцв1 Ьоо1 СопгвзпвКеу(оЬ)есС )г) рцЫсс ч1ггцв1 Ьоо1 СОПСВ1ПВЧВ1ЦЕ(ОЬ)ЕСС Ч) рцЫгс гаггца1 1(авС ЯВСЧВ1цесэвг() риЫгс ч1ггив1 гпг 1пбех01Кеу(оЬ1есС Х) рчЫгс чгггив1 тпг 1пбехогЧВ1ие(опзесС ч) РЧЫ1с сзгсцв1 чосб ЯеСВУ1пбех(1пС 1с(х, оЬ)есг ч) рчЫэс ЗСВСгс 5оггебьэвС Яупспгопсгеб(зоггебььвг в1) РЧЫтс чггсиа1 чоьд тгглто51ге() Ключ или значение можно получить разными способами.
В частности, для получения значения по указанному индексу служит метод сесВу1пбех (), а для установки значения по указанному индексу — метод ЯеСВУ1пбех () . Для извлечения ключа по указанному индексу вызывается метод беСКеу (), а для получения списка ключей по указанному индексу — метод 58СКеуь1ЗС () . Кроме того, для получения списка всех значений из коллекции служит метод ЯеСЧ81цеьавС () . Для получения индекса ключа вызывается метод 1пбехоукеу (), а для получения индекса значения — метод 1пбехРГЧа1це () . Безусловно, в классе Яоггебь15С также поддерживается индексатор, определяемый в интерфейсе 1Р1сС1опагу и позволяющий устанавливать и получать значение по заданному ключу В классе 5оггебьавС доступны также открытые свойства, определенные в тех интерфейсах, которые в нем реализуются.
Как и в классе Наз Ь СаЫ е, в данном классе особая роль принадлежит двум свойствам, Кеув и Ча1цев, поскольку с их помощью можно получить доступную только для чтения коллекцию ключей или значений из коллекции типа Яогсебьавс. Эти свойства определяются в интерфейсе 1расс1опагу следующим образом: РЧЫэс чсгспв1 1Со11есС1оп Кеув ( дегг ) РЧЬ11с гзггив1 1Со11есгэоп Ча1цев ( Чем РчЫгс чггсцв1 оьйесс ЯеСВу1пбех(1пС убх) РчЫ1с чтгсив1 1рьсггопвгувппвегвгог ЯВСБгвхпегвгог() РЧЫгс ч1ггва1 оЬ)есг Яегкеу(1пС ус(х) рцЫгс ч1гСцв1 11пвг яесКеу( ьвс() Глава 24.
Коллекции, перечислигели и итераторы 855 Возвращает логическое значение сгие, если В вызывающей коллекции типа яогсебь).в с содержится ключ х, в противном случае — логическое значение 181ве Возвращает логическое значение сгое, если в вызывающей коллекции типа 5огсебьгвс содержится значение ч, а про- тивном сл)чае — логическое значение 181ве Возвращает значение, указываемое по индексу 1 бх Возврао(ает Для выэываЮщей коллвкции типа Яоггебг 1 вг перечислитель типа 101сс1опвгуБпциегвсог Возвращает значение ключа, указываемое по индексу гбх Возвращает коллекцию типа Яоггесй.1в с с ключами, храня- щимися в вызывающей коллекции типа ЯогСебствС Возвращает коллекцию типа я ох сесн.гв С СО ЗНачЕнИямИ, ХРа- иящимися в вызывающей коллекции типа Яогсебывс Возвращает индекс ключа к. Если искомый ключ ие обнару- жен, 8038рашается значение -1 Возвращает индекс первого вхождения значения ч в вызываю- щей коллекции.
Если искомое значение не обнаружено, воэ- Вращвется значеии8 -1 Устанавливает значение по индексу эс(х равным значению ч Возвращает синхронизированный вариант коллекции типа Яогсвбывс, передаваемой а качестве параметра в1 Устанавливает значение свойства СврвсгСУ Равным значению свойства Соцпс 856 Часть (!. Библиотега Сз Порядок следования ключей и значений отражает порядок их расположения в коллекции типа Яогсеб) Бзс. Аналогично коллекции типа Пазбга)э1е, пары "ключ-значение" сохраняются в коллекции типа яоггебпвзг в форме структуры типа П1СС1опагуЕпггу, ио, как правило, доступ к ключам и значениям осуществляется по отдельности с помощью методов и свойств, определенных в классе яоггебП1зг. В приведенном ниже примере программы демонстрируется применение класса яоггесп1зг. Это переработанный и расширенный вариант предыдущего примера, демонстрировавшего применение класса Назцга)э1е, вместо которого теперь используется класс ЯоггебЬ1зг.
Глядя иа результат выполнения этой программы, вы сами убедитесь, что в данном случае список полученных значений отсортировав по заданному ключу. // Продемонстрировать применение класса ЯогсеЖ1зс. цз1пд Яузгеш; цзтпп Яузсеш.Со11ессгопв) с1азз Яьпещо ( зсас1с чо1б Ма1п() ( // Создать отсортированный список. яогсебпвзс з1 = пеи яогсебь1зг(); // Добавить элементы в список, з1.Асб("здание", "жилое помещение"); з1.Абс((" автомашина", "транспортное средство"); з1.Абб("книга", "набор печатных слов"); з1.АсЫ("яблоко", "съедобный плод")> // Добавить элементы с помощью индексатора. з1("трактор"] = "сельскохозяйственная машина"; // Получить коллекцию ключей. 1Со11ессгоп с = з1.кеуз; // Использовать ключи для получения значений.
Сопзо1е.игзгеЬтпе("Содержимое списка по индексатору."] Гогеасн(зггьпд зсг Ап с) Сопзо1е.иг1сеь1пе(зсг ь ": " + з1(зсг])~ Сопзо1е.иг1сеь1пе()~ // Отобразить список, используя целочисленные // индексы. Сопзо1е.иг1гецкпе("Содержимое списка по целочисленным индексам.") гог(тпс 1=0) 1 < з1.соцпг; 1ть) Сопзо1е.иг1сеь1пе(з1.Песву1пбех(1))) Сопзо1е.иг1геь1пе()~ // Показать целочисленные индексы элементов списка. Сопзо1е.иг1геь1пе("Целочисленные индексы элементов списка.") Гогеасн(зсгтпч зсг 1п с) Глава 24.
Коллекции, перечислители и итераторы 857 Сопво1е.вггсеъ1пе(всг + ": в1.1пбехбтхеу(згг) ); Ниже приведен результат выполнения этой программы. Содержимое списка по инлексатору. автомашина: транспортное средство здание: жилое помещение книга: набор печатных алов трактор: сельскохозяйственная машина яблоко: съедобный плод Содержимое списка по целочисленным индексам. транспортное средство жилое помещение набор печатных алов сельскохозяйственная машина съедобный плод Целочисленные индексы элементов списка. автомобиль: О здание: 1 книга: 2 трактор: 3 яблоко: 4 Класс 8юасус Как должно быть известно большинству читателей, саек представляет собой список, действующий по принципу: последним пришел — первым обслужен.
Этот принцип действия стека можно наглядно представить иа примере горки тарелок, стоящих иа столе. Первая тарелка, поставленная в эту горку, извлекается из иее последней. Стек относится к одним из самых важных структур данных в вычислительной технике. Ои нередко применяется, среди прочего, в системном программном обеспечении, компиляторах, а также в программах отслеживания в обратном порядке из области искусственного интеллекта. Класс коллекции, поддерживающий стек, носит название аеас)к.
В ием реализуются интерфейсы 1со11ессаоп, 1епцшегаь1е и 1с1опеаь1е. Этот класс создает динамическую коллекцию, которая расширяется по мере того, как в ией необходимо хранить вводимые элементы. Всякий раз, когда требуется расширить такую коллекцию, ее емкость увеличивается вдвое. В классе ясаск определяются следующие конструкторы: рцЬ11с агаси() рцЬ11с Бгаса(апг емкость) рцЬ11с Ягаси(1Со11есгиэп с) В первой форме конструктора создается пустой стек, во второй форме — пустой стек, первоначальный размер которого определяет емкость, и в третьей форме — стек, содержащий элементы указываемой коллекции с.
Его первоначальная емкость равна количеству указаииых элементов. В классе зсаск определяется ряд собственных методов, помимо тех, что уже объявлены в интерфейсах, которые в ием реализуются. Некоторые из наиболее употребительных методов этого класса приведены в табл. 24.7. Эти методы обычно применяются следу- 888 Часть П, Библиотека СЗ Таблица 24.7. Наиболее употребительные методы, определенные а классе Вкас)с Метод рпЬ11с ч1гспа1 чогб С1еаг() Описание устанавливает свойство соппг равным нулю, очи- щая, по существу, стек рпЬ11с ч1гспв1 Ьоо1 Сопсвъпз (оЬб ест ч) Возвращает логическое значение кгпв, если обьект ч содержится в вызывающем стеке, в противном случае — логическое значение гв1зе рпЬ11с ч1гспа1 оЬбесс РееК() Возвращает элемент, находящийся на вершине сте- ка, но не удаляет его рпъъьс чагспа1 оЬбесс Рор() Возвращает элемент, находящийся на вершине сте- ка, удаляя его по ходу дела рпьъъс чъггпа1 чоха Рпзь (оьб есг ю помещает объект чв стек рпЬ11с зсасъс Ясасх Яупснгопгаеб(5саск зг)г) Возвращает синхронизированный вариант коллек- ции типа ягаск, передаваемой в качестве параме- тра яс)г рпЬ11с чьгспа1 оЬбесс(] толггау() Возвращает массив, содержащий копии элементов вызывающего стека В приведенном ниже примере программы создается стек, в который помещается несколько целых значений, а затем оии извлекаются обратно из стека.