Герберт Шилдт - C# 4.0: полное руководство
- Название:C# 4.0: полное руководство
- Автор:
- Жанр:
- Издательство:ООО И.Д. Вильямс
- Год:2011
- Город:Москва -- Киев
- ISBN:978-5-8459-1684-6
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Герберт Шилдт - C# 4.0: полное руководство краткое содержание
В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки.
Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию
C# 4.0: полное руководство - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
Класс Dictionary
позволяет хранить пары "ключ-значение" в коллекции как в словаре. Значения доступны в словаре по соответствующим ключам. В этом отношении данный класс аналогичен необобщенному классу Hashtable
. В классе Dictionary
реализуются интерфейсы IDictionary, IDictionary, ICollection, ICollection>, IEnumerable, IEnumerable>, ISerializable
и IDeserializationCallback
. В двух последних интерфейсах поддерживается сериализация списка. Словари имеют динамический характер, расширяясь по мере необходимости.
В классе Dictionary
предоставляется немало конструкторов. Ниже перечислены наиболее часто используемые из них.
public Dictionary()
public Dictionary(IDictionaryCTKey, TValue> dictionary)
public Dictionary(int capacity)
В первом конструкторе создается пустой словарь с выбираемой по умолчанию первоначальной емкостью. Во втором конструкторе создается словарь с указанным количеством элементов dictionary. А в третьем конструкторе с помощью параметра capaci ty указывается емкость коллекции, создаваемой в виде словаря. Если размер словаря заранее известен, то, указав емкость создаваемой коллекции, можно исключить изменение размера словаря во время выполнения, что, как правило, требует дополнительных затрат вычислительных ресурсов.
В классе Dictionary определяется также ряд методов. Некоторые наиболее часто используемые методы этого класса сведены в табл. 25.17.
Таблица 25.17. Наиболее часто используемые методы, определенные в классе Die tionaryCTKey, TValue>
Метод - Описание
public void Add(TKey key , TValue value) - Добавляет в словарь пару “ключ-значение", определяемую параметрами key и value. Если ключ key уже находится в словаре, то его значение не изменяется, и генерируется исключение ArgumentException
public bool ContainsKey(TKey key) - Возвращает логическое значение true,если вызывающий словарь содержит объект key в качестве ключа; а иначе — логическое значение false
public bool ContainsValue(TValue value) - Возвращает логическое значение true,если вызывающий словарь содержит значение value ; в противном случае — логическое значение false
public bool Remove(TKey key) - Удаляет ключ key из словаря. При удачном исходе операции возвращается логическое значение true,а если ключ key отсутствует в словаре — логическое значение false
Кроме того, в классе Dictionary
определяются собственные свойства, помимо тех, что уже объявлены в интерфейсах, которые в нем реализуются. Эти свойства приведены ниже.
Свойство - Описание
public IEqualityComparer Comparer { get; } -Получает метод сравнения для вызывающего словаря
public Dictionary. KeyCollection Keys { get; } -Получает коллекцию ключей
public Dictionary. ValueCollection Values { get; } -Получает коллекцию значений
Следует иметь в виду, что ключи и значения, содержащиеся в коллекции, доступны отдельными списками с помощью свойств Keys
и Values
. В коллекциях типа DictionaryCTKey, TValue>.KeyCollection
и Dictionary.ValueCollection>
реализуются как обобщенные, так и необобщенные формы интерфейсов ICollection
и IEnumerable
.
И наконец, в классе DictionaryCTKey, TValue>
реализуется приведенный ниже индексатор, определенный в интерфейсе IDictionary
public TValue this[TKey key] { get; set; }
Этот индексатор служит для получения и установки значения элемента коллекции, а также для добавления в коллекцию нового элемента. Но в качестве индекса в данном случае служит ключ элемента, а не сам индекс.
При перечислении коллекции типа DictionaryCTKey, TValue> из нее возвращаются пары "ключ-значение" в форме структуры KeyValuePairCTKey, TValue>
Напомним, что в этой структуре определяются два поля.
public TKey Key;
public TValue Value;
В этих полях содержится ключ или значение соответствующего элемента коллекции. Как правило, структура KeyValuePairCTKey, TValue>
не используется непосредственно, поскольку средства класса DictionaryCTKey, TValue>
позволяют работать с ключами и значениями по отдельности. Но при перечислении коллекции типа Dictionary
, например, в цикле foreach
перечисляемыми объектами являются пары типа KeyValuePair
.
Все ключи в коллекции типа DictionaryCTKey, TValue>
должны быть уникальными, причем ключ не должен изменяться до тех пор, пока он служит в качестве ключа. В то же время значения не обязательно должны быть уникальными. К тому же объекты не хранятся в коллекции типа DictionaryCTKey, TValue>
в отсортированном порядке.
В приведенном ниже примере демонстрируется применение класса DictionaryCTKey, TValue>
// Продемонстрировать применение класса обобщенной
// коллекции DictionaryCTKey, TValueX
using System;
using System.Collections.Generic;
class GenDictionaryDemo {
static void Main() {
// Создать словарь для хранения имен и фамилий
// работников и их зарплаты.
Dictionary diet =
new Dictionary();
// Добавить элементы в коллекцию,
diet.Add("Батлер, Джон", 73000);
diet.Add("Шварц, Capa", 59000);
diet.Add("Пайк, Томас", 45000);
diet.Add("Фрэнк, Эд", 99000);
// Получить коллекцию ключей, т.е. фамилий и имен.
ICollection с = diet.Keys;
// Использовать ключи для получения значений, т.е. зарплаты,
foreach(string str in с)
Console.WriteLine ("{0}, зарплата: {1:C}", str, diet[str]);
}
}
Ниже приведен результат выполнения этой программы.
Батлер, Джон, зарплата: $73 000,00
Шварц, Capa, зарплата: $59 000,00
Пайк, Томас, зарплата: $45 000,00
Фрэнк, Эд, зарплата: $99 000,00
В коллекции класса SortedDictionary
пары "ключ-значение" хранятся таким же образом, как и в коллекции класса Dictionary
, за исключением того, что они отсортированы по соответствующему ключу. В классе SortedDictionary
реализуются интерфейсы IDictionary, IDictionary, ICollection, ICollection>, IEnumerable
и IEnumerable>
. В классе SortedDictionary
предоставляются также следующие конструкторы.
public SortedDictionary()
public SortedDictionary(IDictionary dictionary)
public SortedDictionary(IComparer comparer)
public SortedDictionary(IDictionaryCTKey, TValue> dictionary,
IComparer comparer)
В первом конструкторе создается пустой словарь, во втором конструкторе — словарь с указанным количеством элементов dictionary. В третьем конструкторе допускается указывать с помощью параметра comparer типа IComparer
способ сравнения, используемый для сортировки, а в четвертом конструкторе — инициализировать словарь, помимо указания способа сравнения.
Интервал:
Закладка: