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

27. Сортталған және жүйелі тізімдермен жұмыс. Жиындар мен сөздікті пайдалану.

Сұрыпталған тізім

Егер кілттер бойынша сұрыпталған коллекция қажет болса, онда SortedList<TKey, TValue> қолдануға болады. Бұл класс элементтерді кілттік белгілер негізінде сұрыптайды. Белгілердің кез келген түрін ғана емес, сонымен қатар, кілттердің де кез келген түрін қолдануға болады. Төменде келтірілген мысалда сұрыпталған тізім кілт ретінде құрылады және белгілері string түрін қабылдайды. Конструктор үнсіз келісім бойынша бос тізім құрады, оған Add () тәсілінің көмегімен екі кітап енгізіледі. Қолданыстағы конструкторды қолдана отырып, тізімнің сыйымдылығын көрсетуге болады, сонымен қатар, IComparer<TKey> интерфейсін орындайтын, тізімдегі элементтерді сұрыптау үшін қолданылатын объектлерді жіберуге болады.

Add () тәсілінің бірінші параметрі – кілт (кітаптың басы); екінші парметрі – белгілер (ISBN нөмірі). Элементтерді тізімге Add () тәсілімен бірге енгізу үшін индексаторды қолдануға болады. Индексатор индекстің параметрі ретінде кілт талап етеді. Егер мұндай кілт бар болатын болса, Add () тәсілі ArgumentException шығарады. Егер кілттің осы белгісі индексатормен қолданылса, онда жаңа белгі ескі белгіні алмастырады. Keys және Values қасиеттері барлық кілттер мен белгілерге бірден қол жеткізуге мүмкіндік береді. Values қасиеті IList<TValue> қайтарады, ал Keys қасиеті — IList<TKey> қайтады, сондықтан бұл қасиеттерді foreach бірге қолдануға болады:

foreach (string isbn in books.Values)

{ Console.WriteLine(isbn); }

foreach (string title in books.Keys)

{ Console.WriteLine(title); }

Жүйелі тізімдер

.NET Framework динамикалық тізімдері үшін жалпыланған List<T> класы қарастырылған. Бұл класс IList, ICollection, IEnumerable, IList<T>, ICollection<T> және IEnumerable<T> интерфейстерін жүзеге асырады.

Жүйелі тізімнің ерекшелігі ортасына қою операциясы кезінде тез орындалу болып табылады. Бұл жағдайда тек Next(келесі) нұсқау ғана алдыңғы және келесі элементтің Previos(алдыңғы) өзгеруі тиіс болатын элементі жаңа элементті нұсқау үшін List<T>класссында жаңа элементті қою кезінде барлық кейінгі элементтер жылжуы керек.

Арине, жүйелі тізімдердіңде өз кемшіліктері бар. Мысалы, барлық жүйелі тізімінің барлық элементтері тек бір-бірінен кейін ғана қолжетімді. Сондықтан ортасында немесе тізімнің соңында тұрған элементті табу үшін едәуір көп уақыт өтеді.

Жүйелі тізім өзінің ішінде элементтерді жай ғана сақтай алмайды. Онымен бірге әрбір келесі және алдыңғы элементтер ақпараттары болу керек. Міне неге Linkedlist LinkedListNode<T> элемент типін ұсынады. LinkedListNode<T> класының көмегімен алдыңғы және келесі тізімнің элементтеріне қарауға мүмкіншілік пайда болады. LinkedListNode<T> класы List, Next, Previous және Value құрамын анықтайды. List құрамы LinkedList<T> қауымдастырылған түйін объектін қайтарады. Next, Previous құрамдары тізім бойынша итерацияны белгілейді, келесі және алдыңғы элементтерге мүмкіндік ашады.

Жүйелі тізім құжаттарды ішінде ұстайды, мысалы кезекті, бірақ бұл жолы қауымдастырылған, онымен бірге қосымша артықшылықтарды иеленеді. Жүйелі тізімнің ішінде құжаттар өзінің басымдылықтарымен іріктеледі.

LinkedListNode<T> класы Next және Previous құрамдарын қосады, бір түйіннің келесісіне араласуына себеп болады. List<T> элементіне қарау үшін LinkedListNode<Document> анықталған. Соңғы құжатқа кез-келген басымдылықпен ену үшін List<LinkedListNode> 10 элементке дейін сақтайды, әрбір соңғы құжат өзінің әртүрлі басымдылығымен сілтеме жасайды. Келесі талқылауда соңғы құжаттың басымдылық сілтемесі басымдылық түйіні деп аталады.

PriorityDocumentManager класы орталық бөлігінің шешімі болады. Бұл класты пайдалану өте оңай. Бұл кластың қолжетімді интерфейстің көмегімен жүйелі тізімге Document-тің жаңа элементтерін қосуға болады. Сонымен қатар алғашқы құжатты шығаруға болады. Тестілеу мақсатында коллекцияның барлық элементтері көрсетілетін амалдарының тізімде қалай байланысқаны қарастырылады.

Сөздіктер

Сөздік (dictionary) элементке кілт бойынша қолжетімділікті қамтамасыз етуді іске асыратын, мәліметтердің қиын құрылымын қамтиды. Сөздіктердің негізгі қасиеті – кілт негізінде тез іздестіру. Сонымен қатар, элементтерді енгізу мен жоюға болады, бірақ өнімділіктің шығынынсыз, соңғы элементті жадыға қалдыру қажеттілігіне байланысты оны List<T> жүзеге асырады.

10.5 суретте сөздіктің ықшамдалған түрі көрсетілген. Мұнда сөздіктің кілті ретінде қызметкерлердің идентификаторлары алынған, мысалы, В4711. Кілт хешке тасымалданады. Хеште индекстерді белгілерімен ассоциациялау үшін сандар құрылады. Содан соң индекс белгіге сілтеме жасайды. Суреттегі модель ықшамдалған болып табылады, себебі индексті енгізудің жалғыз мүмкіндігі бірнеше белгілерді ассациациялау болуы мүмкін, және индекс тал түрінде сақталуы мүмкін.

.NET Framework-та сөздіктердің бірнеше түрі ұсынылады. Соның ішіндегі қолдануға болатын негізгі класы - Diсtionary<TKey, TValue>.

28. Интегралданған сұраныс тілі. List <T> -ті пайдатанушы объектілерге арналған дәстүрлі сұраныстар.

List<T> типімен қолданған конструкторды кезекті құру барысында колдануға болады. Конструктор үндеместік бойынша бос кезек құрады, бірақ конструкторды бастапқы сыйымдылықты нұсқау ретінде қолдануға болады. Кезекке элементті қосу шамасы бойынша егер сыйымдылық анықталмаған болса алдымен 4, содан соң 6, 16 және 32 элемент орналастыруға мүмкіндік бере отырып сыйымдылық артады. List<T> класына ұқсас кезектің сыйымдылығы керек жағдайда екі еселенеді. Жалпыланбаған Queue класының конструкторы үндеместік бойынша 32 бос элементтерден бастапқы жиымды құруымен ерекшеленеді.

Осы дайын мәндер мен тізімдер үшін List<T>классы FindAll () Soft () қолданылған.

private static void LinqQuery ()

{

var query = from r in Formula1.GetChampions ()

where r.Country == “Brazil”

orderby r.Wins descending

select r;

foreach (Racer r in query)

{

Console.WriteLine (“{0:A}”, r);

}

}

Жауабы: барлық сұраныстардың Бразилияда өткен чемпионатқа қатысушылардың тізімі белгіленген.

Төменде көрсетілген оператор LINQ сұранысы болып келеді:

from r in Formula1.GetChampions ()

where r.Country == “Brazil”

orderby r.Wins descending

select r;

From, where, orderby, descending, select конструкциялары – берілген сұраныстағы алдын - ала анықталған кілттік сөздер.

Сұраныстың көрінісі from конструкциясынан басталып, select немесе group конструкциясынан аяқталуы керек. Олардың арасына қосымша түрде where, orderby, join, let, from конструкцияларын қолдануға болады.

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