Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

16.Коллекции: коллекция Hashtable.




16. Коллекции: коллекция Hashtable.

Класс Hashtable предназначен для создания коллекции, в которой для хранения объектов используется хеш-таблица. В хеш-таблице для хранения информации используется механизм, именуемый хешированием (hashing). Суть хеширования состоит в том, что для определения уникального значения, которое называется хеш-кодом, используется информационное содержимое соответствующего ему ключа. Хеш-код затем используется в качестве индекса, по которому в таблице отыскиваются данные, соответствующие этому ключу. Но преимущество хеширования - в том, что оно позволяет сокращать время выполнения таких операций, как поиск, считывание и запись данных, даже для больших объемов информации.

Класс Hashtable реализует стандартные интерфейсы IDictionary, ICollection, IEnumerable, ISerializable, IDeserializationCallback и ICloneable. Размер хеш-таблицы может динамически изменяться.

В классе Hashtable определено несколько конструкторов:

public Hashtable() //создает пустую хеш-таблицу

// строит хеш-таблицу, которая инициализируется элементами коллекции с

public Hashtable(IDictionary с)

public Hashtable(int capacity) //создает хеш-таблицу с вместимостью capacity

public virtual bool ContainsKey (object k) - Возвращает значение true, если в вызывающей хеш-таблице содержится ключ, заданный параметром k. В противном случае возвращает значение false.

public virtual bool ContainsValue (object v) - Возвращает значение true, если в вызывающей хеш-таблице содержится значение, заданное параметром v. В противном случае возвращает значение false.

В классе Hashtable, помимо свойств, определенных в реализованных им интерфейсах, определены два собственных public-свойства:

public virtual ICollection Keys { get; } //позволяет получить коллекцию ключей

public virtual ICollection Values { get; } //позволяет получить коллекцию значений

Для добавления элемента в хеш-таблицу необходимо вызвать метод Add(), который принимает два отдельных аргумента: ключ и значение.

 

 

17. Регулярные выражения, язык описания регулярных выражений.

Регулярные выражения предназначены для обработки текстовой информации и обеспечивают:

1. Эффективный поиск в тексте по заданному шаблону;

2. Редактирование текста;

3. Формирование итоговых отчетов по результатам работы с текстом.

Регулярное выражение - это шаблон, по которому выполняется поиск соответствующего фрагмента текста. Язык описания регулярных выражений состоит из символов двух видов: обычных символов и метасимволов. Обычный символ представляет в выражении сам себя, а метасимвол - некоторый класс символов.

Метасимволы:

. - Любой символ, кроме \n. - Выражение c. t соответствует фрагментам: cat, cut, c#t, c{t и т. д.

[] - Любой одиночный символ из последовательности, записанной внутри скобок. Допускается использование диапазонов символов. - Выражение c[aui]t соответствует фрагментам: cat, cut, cit. Выражение c[a-c]t соответствует фрагментам: cat, cbt, cct.

\w - Любой алфавитно-цифровой символ. - Выражение c\wt соответствует фрагментам: cbt, cct, c2t и т. д., но не соответствует фрагментам c%t, c{t и т. д.

Уточняющие метасимволы:

^ Фрагмент, совпадающий с регулярными выражениями, следует искать только в начале строки
$ Фрагмент, совпадающий с регулярными выражениями, следует искать только в конце строки

В регулярных выражениях часто используются повторители - метасимволы, которые располагаются непосредственно после обычного символа или группы символов и задают количество его повторений в выражении.

* Ноль или более повторений предыдущего элемента Выражение ca*t соответствует фрагментам: ct, cat, caat, caaat и т. д.
+ Одно или более повторений предыдущего элемента Выражение ca+t соответствует фрагментам: cat, caat, caaat и т. д.
? Не более одного повторения предыдущего элемента Выражение ca? t соответствует фрагментам: ct, cat.

Примеры регулярных выражений:

1. слово rus -

2.  @" rus" или " rus"

3. номер телефона в формате xxx-xx-xx - @" \d\d\d-\d\d-\d\d" или @" \d{3}(-\d\d){2}"

4. номер автомобиля - @" [A-Z]\d{3}[A-Z]{2}\d{2, 3}RUS"

 

 

18. Класс Regex и обработка текстовых данных.

Важнейшим классом, поддерживающим регулярные выражения, является класс Regex, который представляет неизменяемые откомпилированные регулярные выражения. Для описания регулярного выражения в классе определено несколько перегруженных конструкторов:

1. Regex() - создает пустое выражение;

2. Regex(String) - создает заданное выражение;

3. Regex(String, RegexOptions) - создает заданное выражение и задает параметры для его обработки с помощью элементов перечисления RegexOptions (например, различать или нет прописные и строчные буквы).

Поиск фрагментов строки, соответствующих заданному выражению, выполняется с помощью методов IsMach, Mach, Matches класса Regex.

static void Main()

{

Regex r = new Regex(" собака", RegexOptions. IgnoreCase);

string text1 = " Кот в доме, собака в конуре. ";

string text2 = " Котик в доме, собачка в конуре. ";

Console. WriteLine(r. IsMatch(text1));

Console. WriteLine(r. IsMatch(text2));     

}

 

Попытаемся определить, есть ли в заданных строках номера телефона в формате xx-xx-xx или xxx-xx-xx:

static void Main()

{

Regex r = new Regex(@" \d{2, 3}(-\d\d){2}" );

string text1 = " tel: 123-45-67";

string text2 = " tel: no";

string text3 = " tel: 12-34-56";

Console. WriteLine(r. IsMatch(text1));

Console. WriteLine(r. IsMatch(text2));

Console. WriteLine(r. IsMatch(text3));

}

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...