Г. Шилдт - С#4.0 Полное руководство (1160795), страница 198
Текст из файла (страница 198)
Если ключ )геу уже находится в словаре, то его значение не изменяется, и генерируется исключение )(гдиюепсЕхсерС1оп риыго ьоо1 солса гпзкеу (ткеу Возвращает логическое значение сгие, если вызыаайеу) ющий словарь содержит обьект )геу а качестве ключа; в противном случае — логическое значение Та1зе риЫгс чогб йбб(ТКеу )геу ТЧа1ие иа1ие) В первом конструкторе создается пустой словарь, во втором конструкторе — словарь с указанным количеством элементов бгссбопагу. В третьем конструкторе допускается указывать с помощью параметра союрагег типа 1Союрагег способ сравнения, используемый для сортировки, а в четвертом конструкторе — инициализировать словарь, помимо указания способа сравнения. В классе БоггебРТстгопагу<ТКеу, ТЧа1ие> определен ряд методов.
Некоторые наиболее часто используемые методы этого класса сведены в табл. 25.18. Глава 25. Комекции, перечислители и итераторы 973 Окончание табл. 25.18 Метод Описание Возвращает логическое значение ггие, если вызывающий словарь содержит значение ча1ие; в противном случае — логическое значение Та1ве риЫТс Ьоо1 Кеыоче (ТКеу )геу) Удаляет ключ )геу из словаря. При удачном исходе операции возвращается логическое значение ггие, а если ключ )геу отсутствует в словаре — логическое значение Та1ве риЬ11с Ьоо1 Сопса з пзиа1ие (ТЧа1ие ча1 ие) Свойсао Описание риЬ11с 1соырагег<ТКеу> Соырагег ( оеЫ Получает метод сравнения для вызы- вающего словаря Получает коллекцию ключей риЬ11с Богсес)Р1сг1опагу<ТКеу, ТЧа1ие>. КеуСо11есгзоп Кеув ( дегг риЫго Боггес)Р1сг1опагу<ТКеу, ТЧа1ие>.
Ча1иеСо11есс1оп Ча1иез ( оегг ) Получает коллекцию значений Следует иметь в виду, что ключи и значения, содержащиеся в коллекции, доступны отдельными списками с помощью свойств Кеуз и Ча1иез. В коллекциях типа Боггес)Р1сг1опагу<ТКеу, ТЧа1ие>.КеуСо11есг1оп и Боггес(Р1сСТопагу<ТКеу, ТЧа1ие > . Ча1иеСо11есг1оп реализуются как обобщенные, так и необобщенные формы интерфейсов 1Со11есг1оп и 1ЕпигпегаЬ1е.
И наконец, в классе Боггес]Р1сг1опагу<ТКеу, ТЧа1ие> реализуется приведенный ниже индексатор, определенный в интерфейсе 1Р1сгьопагу<ткеу, тча1ие>. риЫгс ТЧа1ие Гпгв(ТКеу хеу] ( сею веси Этот индексатор служит для получения и установки значения элемента коллекции, а также для добавления в коллекцию нового элемента. Но в данном случае в качестве индекса служит ключ элемента, а не сам индекс. При перечислении коллекции типа Боггес)птсг1опагу<ТКеу, ТЧа1ие> из нее возвращаются пары "ключ — значение" в форме структуры КеуЧа1иераьг<ТКеу, ТЧа1ие>.
Напомним, что в этой структуре определяются два следующих поля. риЫТс ТКеу Кеуг риЫ1с ТЧа1ие Ча1ие; В этих полях содержится ключ или значение соответствующего элемента коллекции. Как правило, структура КеуЧа1иераьг<ТКеу, ТЧа1ие> не используется непосредственно, поскольку средства класса Боггег)Р1с11опагу<ТКеу, ТЧа1ие> позволяют работать с ключами и значениями по отдельности. Но при перечислении коллекции типа Боггег)01сг1опагу<ТКеу, ТЧа1ие>, например в цикле Тогеасп, перечисляемыми объектами являются пары типа КеуЧа1иеРауг.
Кроме того, в классе Богсес)Р1сс1опагу<ТКеу, ТЧа1ие> определяются собственные свойства, помимо тех, что уже объявлены в интерфейсах, которые в нем реализуются. Эти свойства приведены ниже. 974 Часть (). Библиотека С() Все ключи в коллекции типа Боггес(О1СС1опагу<ТКеу, ТЧа1це> должны быть уникальными, причем ключ не должен изменяться до тех пор, пока он служит в качестве ключа. В то же время значения не обязательно должны быть уникальными.
В приведенном ниже примере демонстрируется применение класса Богсебпуссуопагу<ТКеу, ТЧа1це>. Это измененный вариант предыдущего примера, демонстрировавшего применение класса О1сс1опагу<ТКеу, ТЧа1це>. В данном варианте база данных работников отсортирована по фамилии и имени работника, которые служат в качестве ключа. // Продемонстрировать применение класса обобщенной коллекции япгсеб01ссгппагу<ТКеу, Т(/а1це>. цяьпч Яуягепц ця1пч Яуясею.со11есс1ппя.оепег1с; с1аяя Бепзпгседптссьопагусеюо ( *гагьс чпьа на1п() ( Создать словарь для хранения имен и фамилий // работников и их зарплаты.
Яогсес(01сс1опагу<ясггпо, бпцпте> бьсс = пен Япгсебоьссьппагу<ясг1пч, бппЬ1е>(); // Добавить элементы в коллекцию. сгсГ.АсЫ (" Батлер, Джон", 73000); сн.сг.лсЫ (" Шварц, Сара", 59000); 01сс.лсЫ (" Пайк, Томас", 45000); бгсс.лсЫ("Фрэнк, Эд", 99000)г Получить коллекцию ключей, т.е.
фамилий и имен. 1Сп11есг1оп<ясгьпч> с = бгсГ.Кеуяс Испольэовать ключи для получения значений, т.е. зарплаты. Гогеасп(ясг1па ясг гп с) Сппяо1е.нг1сеь1пе("(О), зарплата: (1:С)", ясг, с(1сс(ясг)); Эта программа дает следующий результат. Батлер, Джон, зарплата: 573,000.00 Пайк, Томас, зарплата: 545,000.00 Фрэнк, Эд, зарплата: 599,000.00 Шварц, Сара, зарплата: 559, 000.00 Как видите, список работников и их зарплаты отсортированы по ключу, в качестве которого в данном случае служит фамилия и имя работника. Класс ЗогседТ з.аС(ТКеу, ТЧа1це> В коллекции класса Богсес(11яг<ткеу, тча1це> хранится отсортированный список пар "ключ-значение". Это обобщенный эквивалент класса необобщенной коллекции Богсес(Ь1яг.
В классе БогсестЬ1яг<ТКеу, ТЧа1це> реализ1чотся интерфейсы 101сслопагу, 1О1сс1опагу<ТКеу, ТЧа1це>, 1Со11есс1оп, 1Со11ессуоп<КеуЧа1цералг<ТКеу, ТЧа1це», 1ЕпцщегаЬ1еи 1ЕпцюегаЬ1е<КеуЧа1церафг<ТХеу, ТЧа1це».Размер Глава 25. Коллекции, перечислители и итераторы 975 рагс риЫтс рагс ряЫ1с Яоггеяъьяг() яоггег(ьхяс(то1сгтопагу<ткеу, тча1ие> жсстопагу) яоггеяъьяг(сяг сарасзСу) яоггег(ъсяг(тсогорагег<ТК> сотрагег) В первой форме конструктора создается пустой список с выбираемой по умолчанию первоначальной емкостью. Во второй форме конструктора создается отсортированный список с указанным количеством элементов Ж ссуопяяу.
В третьей форме конструктора с помощью параметра сараев Су задается емкость коллекции, создаваемой в виде отсортированного списка. Если размер списка заранее известен, то, указав емкость создаваемой коллекции, можно исключить изменение размера списка во время выполнения, что, как правило, требует дополнительных затрат вычислительных ресурсов. И в четвертой форме конструктора допускается указывать с помощью параметра сотяраяег способ сравнения объектов, содержащихся в списке. Емкость коллекции типа Боггеоьзяг<ТКеу, ТЧа1ое> увеличивается автоматически по мере необходимости, когда в список добавляются новые элементы.
Если текущая емкость коллекции превышается, то она увеличивается. Преимущество указания емкости коллекции типа Боггес)11яг<ткеу, тча1ое> при ее создании заключается в снижении или полном исключении издержек на изменение размера коллекции. Разумеется, указывать емкость коллекции целесообразно лишь в том случае, если заранее известно, сколько элементов требуется хранить в ней. В классе Яогсеоьзяг<ткеу, тча1ие> определяется рад собственных методов, помимо тех, что уже объявлены в интерфейсах, которые в нем реализуются. Некоторые из наиболее часто используемых методов этого класса перечислены в табл.
25.19. Следует иметь в виду, что перечислитель, возвращаемый методом БегЕп шве гаго г ( ), служит для перечисления пар "ключ — значение", хранящихся в отсортированном списке в виде объектов типа Ке уЧа1ие Ра 1 г. Таблица 25.15. Наиболее часто используемые методы, определенные в классе Боксе<)ь1вс<ткеу, тча1пе> Метод Описание Добавляет в список пару "ключ-значение", ОПрЕдЕЛяЕМуЮ ПараМЕтраМИ )геу Н ча1ие. Если ключ )геу уже находится в списке, то его значение не изменяется, и генерируется исключеннв АгошвепгЕхсерг1оп риЫ1с Ьоо1 Сопга1пякеу(ТК )геу) Возвращаетлогическоезначениесгое,есливызывающнй список содержит объект )геу в качестве ключа; а нначе - логическое значение Га1яе роЫ1с чозп Ас(о (ТКеу )геу, ТЧа1ое ча1яе) коллекции типа Богсес(ЕЬяг<ткеу, тча1ие> изменяется динамически, автоматически увеличиваясь по мере необходимости.
Класс Боггес(ЕЬяг<ткеу, тча1ие> подобен классу Боггег)Р1сг1опагу<ТКеу, ТЧа1ие>, но у него другие рабочие характеристики. В частности, класс Боггес(ьуяг<ткеу, тча1ое> использует меньше памяти, тогда как класс Боггес(р1сг1опагу<ТКеу, ТЧа1ие> позволяет быстрее вставлять неупорядоченные элементы в коллекцию. В классе Богсег(51яс<ткеу, тча1ое> предоставляется немало конструкторов. Ниже перечислены наиболее часто используемые конструкторы этого класса. 976 Часть П.
Библиотека С() Окончание табл. 25.19 Метод Описание риЬ11с Ьоо1 Сопса1пвЧа1ие(ТЧа1ие ча1ие) Возвращает логическое значение сгие, если вызывающий список содержит значение чя1ие) в противном случае — логическое зна- чение Та1яе Возвращает перечислитель для вызывающего словаря Возвращает индекс ключа Кеу. Если искомый ключ не обнаружен в списке, возвращается значение -1 Возвращает индекс первого вхождения зна- чения ча1ие в вызывающем списке.
Если ис- комое значение не обнаружено в списке, воз- вращается значение -1 Удаляет из списка пару "ключ-значение" по указанному ключу Кеу. При удачном исходе операции возвращается логическое значение ь гие, а если ключ Кеу отсутствует в списке— логическое значение га1ве Удаляет из списка пару "ключ-значение" по ука- занному индексу Тпе)ех Сокращает избыточную емкость вызывающей комекции в виде отсортированного списка риЬ11с 1Епивегагог<КеуЧа1иеразг <ткеу, тча1ие» Оесепивегасог О риЫ1с 1пг 1пг(ехОгкеу(ТКеу Кеу) риЫ1с 1пс 1пг(ехОгЧа1ие (ТЧа1ие ча1ив) риЬ11с Ьоо1 Еевоче (ТКеу Кеу) риЬ11с чо1г( Кевочедг(1пг Тпе(ех) риЫ1с чо1г) Тг1вЕхсеяв() Кроме того, в классе яогсес)Ь1вс<ТК, ТЧ> определяются собственные свойства, помимо тех, что уже объявлены в интерфейсах, которые в нем реализуются.