программирование. Руководство su P# a n Reference в herbert schildt полное руководство с 0 герберт шилдт
Скачать 3.32 Mb.
|
11.AddLast('Y'); 11.AddLast('Z'); Console.Write("Содержимое списка после ввода элементов: "); foreach(char ch in 11) Console.Write(ch + " "); Console.WriteLine("\n"); } } Ниже приведен результат выполнения этой программы. . Исходное количество элементов в списке: О Добавить в список 5 элементов Количество элементов в списке: 5 Отобразить содержимое списка по ссылкам: Е D С В А Отобразить содержимое списка в цикле foreach: Е D С В А Следовать по ссылкам в обратном направлении: А В С D Е Удалить 2 элемента из списка Количество элементов в списке: 3 Содержимое списка после удаления элементов: Е D В Содержимое списка после ввода элементов: Е D В X Y Z Самое примечательное в этой программе – это обход списка в прямом и обратном направлении, следуя по ссылкам, предоставляемым свойствами Next и Previous. Двунаправленный характер подобных связных списков имеет особое значение для приложений, управляющих базами данных, где нередко требуется перемещаться по списку в обоих направлениях. Класс DictionaryCTKey, TValue> Класс Dictionary В классе Dictionary public Dictionary() public Dictionary(IDictionaryCTKey, TValue> dictionary) public Dictionary(int capacity) В первом конструкторе создается пустой словарь с выбираемой по умолчанию первоначальной емкостью. Во втором конструкторе создается словарь с указанным количеством элементов dictionary. А в третьем конструкторе с помощью параметра capaci ty указывается емкость коллекции, создаваемой в виде словаря. Если размер словаря заранее известен, то, указав емкость создаваемой коллекции, можно исключить изменение размера словаря во время выполнения, что, как правило, требует дополнительных затрат вычислительных ресурсов. В классе Dictionary Таблица 25.17. Наиболее часто используемые методы, определенные в классе Die tionaryCTKey, TValue> Метод Описание public value) void Add(TKey key , TValue Добавляет в словарь пару “ключ‑значение", определяемую параметрами key и value. Если ключ key уже находится в словаре, то его значение не изменяется, и генерируется исключение ArgumentException public key) bool ContainsKey(TKey Возвращает логическое значение true, если вызывающий словарь содержит объект key в качестве ключа; а иначе – логическое значение false public value) bool ContainsValue(TValue Возвращает логическое значение true, если вызывающий словарь содержит значение value ; в противном случае – логическое значение false public bool Remove(TKey key) Удаляет ключ key из словаря. При удачном исходе операции возвращается логическое значение true, а если ключ key отсутствует в словаре – логическое значение false Кроме того, в классе Dictionary Свойство Описание public IEqualityComparer Получает метод сравнения для вызывающего словаря Получает коллекцию ключей ‑Получает коллекцию значений Следует иметь в виду, что ключи и значения, содержащиеся в коллекции, доступны отдельными списками с помощью свойств Keys и Values. В коллекциях типа DictionaryCTKey, TValue>.KeyCollectionи Dictionary И наконец, в классе DictionaryCTKey, TValue> реализуется приведенный ниже индексатор, определенный в интерфейсе IDictionary public TValue this[TKey key] { get; set; } Этот индексатор служит для получения и установки значения элемента коллекции, а также для добавления в коллекцию нового элемента. Но в качестве индекса в данном случае служит ключ элемента, а не сам индекс. При перечислении коллекции типа DictionaryCTKey, TValue> из нее возвращаются пары "ключ‑значение7' в форме структуры KeyValuePairCTKey, TValueX Напомним, что в этой структуре определяются два поля. public TKey Key; public TValue Value; В этих полях содержится ключ или значение соответствующего элемента коллекции. Как правило, структура KeyValuePairCTKey, TValue> не используется непосредственно, поскольку средства класса DictionaryCTKey, TValue> позволяют работать с ключами и значениями по отдельности. Но при перечислении коллекции типа DictionaryCTKey, TValue>, например, в цикле foreach перечисляемыми объектами являются пары типа KeyValuePair. Все ключи в коллекции типа DictionaryCTKey, TValue> должны быть уникальными, причем ключ не должен изменяться до тех пор, пока он служит в качестве ключа. В то же время значения не обязательно должны быть уникальными. К тому же объекты не хранятся в коллекции типа DictionaryCTKey, TValue> в отсортированном порядке. В приведенном ниже примере демонстрируется применение класса DictionaryCTKey, TValueX // Продемонстрировать применение класса обобщенной // коллекции DictionaryCTKey, TValueX using System; using System.Collections.Generic; class GenDictionaryDemo { static void Main() { // Создать словарь для хранения имен и фамилий // работников и их зарплаты. Dictionarycstring, double> diet = new Dictionarycstring, double>(); // Добавить элементы в коллекцию, diet.Add("Батлер, Джон", 73000); diet.Add("Шварц, Capa", 59000); diet.Add("Пайк, Томас", 45000); diet.Add("Фрэнк, Эд", 99000); // Получить коллекцию ключей, т.е. фамилий и имен. ICollection // Использовать ключи для получения значений, т.е. зарплаты, foreach(string str in с) Console.WriteLine ("{0}, зарплата: {1:C}", str, diet[str]); } } Ниже приведен результат выполнения этой программы. Батлер, Джон, зарплата: $73,000.00 Шварц, Сара, зарплата: $59,000.00 Пайк, Томас, зарплата: $45,000.00 Фрэнк, Эд, зарплата: $99,000.00 Класс SortedDictionary В коллекции класса SortedDictionary public SortedDictionary() public SortedDictionary(IDictionary public SortedDictionary(IComparer public SortedDictionary(IDictionaryCTKey, TValue> dictionary, IComparer В первом конструкторе создается пустой словарь, во втором конструкторе – словарь с указанным количеством элементов dictionary. В третьем конструкторе допускается указывать с помощью параметра comparer типа IComparer способ сравнения, используемый для сортировки, а в четвертом конструкторе – инициализировать словарь, помимо указания способа сравнения. В классе SortedDictionary Таблица 25.18. Наиболее часто используемые методы, определенные в классе SortedDictionaryCTKey, TValue> Метод Описание public void Add (TKey key, Добавляет в словарь пару “ключ‑значение", TValue value) определяемую параметрами key и value. Если ключ key уже находится в словаре, то его значение не изменяется, и генерируется исключение ArgumentException public bool ContainsKey (TKey Возвращает логическое значение true, если вызыва‑кеу) ющий словарь содержит объект key в качестве клю‑ _ча; в противном случае – логическое значение false Метод Описание public bool ContainsValue(TValue value) public bool Remove(TKey key) Возвращает логическое значение true, если вызывающий словарь содержит значение value; в противном случае – логическое значение false Удаляет ключ key из словаря. При удачном исходе операции возвращается логическое значение true, а если ключ key отсутствует в словаре – логическое значение false Кроме того, в классе SortedDictionary Свойство Описание public Icomparer public SortedDictionaryCTKey, TValue>. KeyCollection Keys { get; } public SortedDictionary \ Получает метод сравнения для вызывающего словаря Получает коллекцию ключей Получает коллекцию значений Следует иметь в виду, что ключи и значения, содержащиеся в коллекции, доступны отдельными списками с помощью свойств Keys и Values. В коллекциях типа SortedDictionary И наконец, в классе SortedDictionary public TValue this[TKey key] { get; set; } Этот индексатор служит для получения и установки значения элемента коллекции, а также для добавления в коллекцию нового элемента. Но в данном случае в качестве индекса служит ключ элемента, а не сам индекс. При перечислении коллекции типа SortedDictionary public TKey Key; public TValue Value; В этих полях содержится ключ или значение соответствующего элемента коллекции. Как правило, структура KeyValuePair Все ключи в коллекции типа SortedDictionary В приведенном ниже примере демонстрируется применение класса SortedDictionary // Продемонстрировать применение класса обобщенной // коллекции SortedDictionary using System; using System.Collections.Generic; class GenSortedDictionaryDemo { static void Main() { // Создать словарь для хранения имен и фамилий // работников и их зарплаты. SortedDictionary new SortedDictionary // Добавить элементы в коллекцию, diet.Add("Батлер, Джон", 73000); diet.Add("Шварц, Capa", 59000); diet.Add("Пайк, Томас", 45000); diet.Add("Фрэнк, Эд", 99000); // Получить коллекцию ключей, т.е. фамилий и имен. ICollection // Использовать ключи для получения значений, т.е. зарплаты, foreach(string str in с) Console.WriteLine("{0}, зарплата: {1:C}", str, diet[str]); } } Эта программа дает следующий результат. Батлер, Джон, зарплата: $73,000.00 Пайк, Томас, зарплата: $45,000.00 Фрэнк, Эд, зарплата: $99,000.00 Шварц, Сара, зарплата: $59,000.00 Как видите, список работников и их зарплаты отсортированы по ключу, в качестве которого в данном случае служит фамилия и имя работника. Класс SortedListCTKey, TValue> В коллекции класса SortedList В классе SortedListcTKey, TValue> предоставляется немало конструкторов. Ниже перечислены наиболее часто используемые конструкторы этого класса. public SortedList () public SortedList(IDictionaryCTKey, TValue> dictionary) public SortedList(int capacity) public SortedList(IComparer В первой форме конструктора создается пустой список с выбираемой по умолчанию первоначальной емкостью. Во второй форме конструктора создается отсортированный список с указанным количеством элементов dictionary. В третьей форме конструктора с помощью параметра capacity задается емкость коллекции, создаваемой в виде отсортированного списка. Если размер списка заранее известен, то, указав емкость создаваемой коллекции, можно исключить изменение размера списка во время выполнения, что, как правило, требует дополнительных затрат вычислительных ресурсов. И в четвертой форме конструктора допускается указывать с помощью параметра comparer способ сравнения объектов, содержащихся в списке. Емкость коллекции типа SortedListcTKey, TValue> увеличивается автоматически по мере необходимости, когда в список добавляются новые элементы. Если текущая емкость коллекции превышается, то она увеличивается. Преимущество указания емкости коллекции типа SortedListcTKey, TValue> при ее создании заключается в снижении или полном исключении издержек на изменение размера коллекции. Разумеется, указывать емкость коллекции целесообразно лишь в том случае, если заранее известно, сколько элементов требуется хранить в ней. В классе SortedListcTKey, TValue> определяется ряд собственных методов, помимо тех, что уже объявлены в интерфейсах, которые в нем реализуются. Некоторые из наиболее часто используемых методов этого класса перечислены в табл. 25.19. Следует иметь в виду, что перечислитель, возвращаемый методом GetEnumerator () , служит для перечисления пар "ключ‑значение", хранящихся в отсортированном списке в виде объектов типа KeyValuePair. Таблица 25.19. Наиболее часто используемые методы, определенные в классе SortedListCTKey, TValue> Метод Описание |