Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
C_theory_Ris_1g__Zachita.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
666.83 Кб
Скачать

26.Интерфейстер және коллекциялар типтері. Тізім, кезек және стектермен жұмыс.

Коллекциялардың көпшілігі System.Collections және System.Collections.Generic кеңістігінде болады.Жалпылама коллекциялар класын System.Collections.Generic кеңістігінде табуға болады.Анықталған типтің сақталуы үшін қолданылатын коллекциялар класы System.Collections.Specialized. кеңістінде орналасады. Жиындар қатысында кауіпсіз коллекциялар класы System.Collections.Concurrent. кеңістігінде анықталады.

Әрине коллекциялар класын топтарға бөлудің басқа да тәсілдері бар. Интерфейстер негізінде коллекциялар тізімде топтала алады, әсіресе коллекциялар мен сөздіктер.

Коллекция үшін маңызды интерфейстер

IEnumerable<T> - коллекциямен foreach операторын қолданғанда керек.Бұл интерфейс GetEnumerator( ) әдісін анықтайды.

ICollection<T> - жалпылама коллекциялар негізіне құрылады.Оның көмегімен коллекциядағы элементтер санын алуға болады және коллекцияны массивке көшіруге болады.( CopyTo әдісі) .Сонымен қатар коллекция элементтерін қосуға,өшіруге( Add( ) , Remove( ), Clear ( ) ) болады.

Ilist<T> - тізім құру үшін қажет.Бұл интерфейс индексаторды және қою әдістерін, элементтерді өшіруді анықтайды.( Insert ( )әдісі және Remove( ))

ConvertAll<TOutput> ( ) және List <T> әдістерімен коллекциялар типі. ConvertAll<TOutput> ( ) әдісі Converter делегатын қолданады:

Public sealed delegate TOutput Converter <TInput>,<TOutput> ( TInput from);

Бұл жалпылау типтерінде TInput және TOutput қолданылады.

Коллекциялар оқуға және жазу үшін құрылған. Коллекция List<T> AsReadOnly әдісін пайдаланады.

Тізім

LinkedList<T> класы екі байланысты тізімді анықтайды.Тізімнің артықшылығы элементті ортасына орналастыру өте жылдам орындалады. Бұл кезде Next сілтемесі келесі Previous элементін өзгертуі керек.Бір – бірімен байланысқан тізімдер өз ішіне элементтерді сақтай алмайды.Әрбір элементпен қоса оларға келесі және алдыңғы элемент жайлы ақпарат болуы қажет.Міне сол үшін мысалы,LinkedList<T> LinkedlistNode<T>элемент типін иеленеді. LinkedList<T> класының өзі тізімдегі бірінші (First) және соңғы (Last)элементке элементті қою үшін бағытты анықтайды( AddAfter(),AddBefore(),AddFirst(),AddLast()) позициясын қолданып, элементтерді жою үшін ( Remove(),RemoveFist(),RemoveLast()) не болмаса тізімнің аяғынан .

Егер сұрыпталған коллекция алу үшін SortedList<TKey,TValue> қолданады.Бұл класс элементтерді кілт негізінде сұрыптап отырады.

Foreach операторы көмегімен тізім бойынша итерация орындауға болады.

Foreach (KeyValuePair < string,string> book in books)

{

Console.WriteLine ( “{0},{1}”, book.Key, book.Value);

}

Кезек

Кезек(queue)- бұл элементтер «бірінші кірді, бірінші шықты»(first in, first out) схемасы бойынша өңделетін коллекция. Кезекке бірінші тұрғызылған элемент бірінші болып есептеледі. Кезекке аэропротқа кезекке тұру, жұмысқа тұруға кезекке тұру, принтерден басып шығаруға кезекке тұру не ағымдардың процессордың ресурсын бөлуге циклдық кезек. Басымдылығына сәйкес, элементтер әртүрлі өңделетін кезектер жиі кездеседі. Мысалға, аэропорттардағы кезектерде бизнес-сынып жолаушыларына эконом-сынып жолаушыларының алдында қызмет етіледі. Мұнда біреуден әрбір басымдыққа бірнеше кезектер қолдануға болады. Бұны аэропортта анық көруге болады, себебі онда екі тіркеу бағаны бизнес-сынып және эконом-сынып жолаушыларына қарастырылған. Сізде жиым элементі басымдықты білдіретін кезек тізімінің жиымы болуы мүмкін. Әрбір жиым элементінің ішінде кезек болады, және өңдеу FIFO қағидаттары бойынша орындалады.

Ары қарай нақты бөлімде басымдық тізімін анықтау үшін байланыс тізімінің әртүрлі жүзеге асырылуы қолданылады.

Кезек System.Collection.Generic аттар кеңістігінің Queue<T> класының көмегімен жүзеге асады. Queue<T> класының ішінде List<T> класы жұмысына ұқсас Т типті жиымды қолданады. Ол IEnumerable<T> және ICollection интерфейсін жүзеге асырады, ICollection<T> емес. ICollection<T> интерфейсі кезек үшін рұқсат етілмеген болатын Add() және Remove() тәсілдерін анықтайтындықтан жүзеге аспаған .

Queue<T> класы IList<T> интерфейсін жүзеге асырмайды,сондықтан кезек эелементтеріне индексатор арқылы байланысуға болмайды.

Queue<T> класының Сипаттамасы

таңдаулы мүшелері

Count Count қасиеті кезектегі элемент санын қайтарады.

Enqueue() Enqueue() тәсілі кезектің соңына элементті қосады.

Dequeue() Dequeue() тәсілі кезектің басынан элементті оқиды және өшіреді. Егер Dequeue() тәсілінің шақыру мезетінде кезекте элемент басқа жоқ болса, InvalidOperationException ерекшелігін генерациялайды.

Peek() Peek() тәсілі кезектің басынан элементті оқиды,бірақ оны жоймайды.

Cтектер

Стек ( stack) – кезекке ұқсас контейнер.Элементтерге қолжетімділік үшін басқа әдістер қолданылады.Стекке соңғы қосылған элемент бірінші болып саналады. Стек – бұл «соңғы кірді,бірінші шықты» позициясымен жұмыс істейді.

Push ( ) әдісімен стекке үш элементті орналастыру. Foreach операторымен IEnumerable интерфейсін қолданатын итерация орындалады.

Var alphabet = new Stack <char> ( );

Alphabet.Push( ‘A’);

Alphabet.Push( ‘B’);

Alphabet.Push( ‘C’);

Foreach ( string item in alphabet)

{ Console.Write( item);}

Console.WriteLine ( );

Кезекте элементтер соңғы қосылған элементтен бірінші ретке қарай оқылады, мынадай нәтиже алынады:

СВА

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]