Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

овп2 / ОВП2_коллекции2

.pdf
Скачиваний:
5
Добавлен:
03.03.2016
Размер:
259.44 Кб
Скачать

ВП2_Коллекции

Пример 2. Разработаем простейшую записную книжку, в которую можно добавлять и удалять телефоны, а также осуществлять поиск номера телефона по фамилии и фамилии по номеру телефона.

using System;

using System.Collections; using System.IO;

using System.Text;

namespace MyProgram

{

class Program

{

static void printTab(string s, Hashtable a)

{

Console.WriteLine(s);

ICollection key = a.Keys; //Прочитали все ключи

foreach (string i in key)//использование ключа для получения значения

{

Console.WriteLine(i + "\t" + a[i]);

}

}

static void Main(string[] args)

{

StreamReader fileIn = new StreamReader("t.txt",Encoding.GetEncoding(1251));

string line;

Hashtable people = new Hashtable();

while ((line = fileIn.ReadLine()) != null) //цикл для организации обработки

файла

{

string [] temp = line.Split(' '); people.Add(temp[0],temp[1]);

}

fileIn.Close();

printTab("Исходные данные: ", people);

Console.WriteLine("Введите номер телефона"); line = Console.ReadLine();

if (people.ContainsKey(line)) Console.WriteLine(line + "\t" + people[line]); else

{

Console.WriteLine("Такого номера нет в записной книжке.\nВведите фамилию: ");

21

ВП2_Коллекции

string line2=Console.ReadLine(); people.Add(line,line2);

}

printTab("Исходные данные: ", people);

Console.WriteLine("Введите фамилию для удаления"); line = Console.ReadLine();

if (people.ContainsValue(line))

{

ICollection key =people.Keys; //Прочитали все ключи Console.WriteLine(line);

string del="";

foreach (string i in key)//использование ключа для получения значения if (string.Compare((string)people[i], line) == 0)

{

del = i; break;

}

Console.WriteLine(del + "\t" + people[del] + "- данные удалены!!!");

people.Remove(del); printTab("Измененные данные: ", people);

}

else Console.WriteLine("Такого абонента в записной книжке нет ");

}

}

}

_________t.txt____________

12-34-56 Иванов

78-90-12 Петров

34-56-78 Семёнов

90-11-12 Пиманов

22

ВП2_Коллекции

Выбор подходящей коллекции в .NET.

От выбора структур хранения данных и алгоритмов в значительной степени зависит производительность. Поэтому знание стандартных коллекций дает возможность писать более быстрые и надежные программы.

Встроенные массивы или List?

Массивы в C# отлично подходят для хранения огромного числа элементов, но есть одна проблема, они являются неизменными в плане добавления или удаления элементов. Другими словами, если мы хотим уменьшить или увеличить число элементов в массиве, нам придется заново пересоздавать весь массив. Это занимает сравнительно много ресурсов.

List, напротив же, идеален для тех случаев, когда количество элементов в коллекции часто меняется.

Итог: если коллекция не меняется или меняется редко – выбираем встроенные массивы, в противном случае List.

List или ArrayList?

Класс List в C# появился на платформе .NET значительно позже, чем Hashtable. Эти две коллекции фактически являются одним и тем же – реализацией динамических массивов в C#. Но в отличие от ArrayList, список (list) является generic-типом, строго типизированным, а значит и более быстрым в тех случаях, когда тип данных нам известен заранее.

Dictionary или Hashtable?

Эти две коллекции служат для хранение элементов в формате ключ-значения. Здесь мы имеем точно такую же ситуацию как с List и ArrayList. Dictionary появился позже, он является generic типом, он более быстр в тех случаях, когда тип данных нам известен заранее.

List или Stack?

Стэк - необычная коллекция, она оптимизирована под работу по принципу LIFO (последний пришел, первый вышел). Конечно, с помощью List можно реализовать так же принцип, но он будет работать менее производительно, чем стэк.

23

ВП2_Коллекции

24

Соседние файлы в папке овп2