Г. Шилдт - С# 3.0 Полное руководство. 2010 (1160798), страница 119
Текст из файла (страница 119)
Оператор яе1есс определяет тип значения, перечисляемого по запросу, а оператор дгопр возвращает данные группами, причем каждая группа может перечисляться по отдельности. Как следует из приведенных выше примеров, в операторе ы)тете указываются критерии, которым должен удовлетворять искомый элемент, чтобы быть полученным по запросу. А остальные операторы позволяют уточнить запрос. Все оии рассматриваются далее по порядку. Отбор запрашиваемых значений с помощью оператора алехе Как пояснялось выше, оператор ы)тете служит для отбора данных, возвращаемых по запросу. В предыдущих примерах этот оператор был продемонстрирован в своей простейшей форме, в которой для отбора данных используется единственное условие. Однако для более тшательиого отбора данных можно использовать несколько условий и, в частности, в нескольких операторах ы)тете.
В качестве примера рассмотрим следующую программу, в которой из массива выводятся только те значения, которые положительны и меньше 10. // Использовать несколько операторов ноете. ивгпч яувгеш; ивап9 зувсеш.Паис!) с1аяв тноИИегвв ( вгаггс чего Маги() ( гпС!) пиша = ( 1, -2, 3, -3, О, -8, 12, 19, б, 9, 10 ); // Сформировать запрос на получение положительных // значений меньше 10. чвг рояиишв = Гхош и зи иишя ноете п > 0 нпеге и < 10 яе1есс пт Сопво1е.иг1Се("Положительные значения меньше 10. "") // Выполнить запрос и вывести его результаты. Гогеасп(гпг 1 ап рояиишя) Сопяо1е.игасе (1 + " "); Сопво1е.иг1Сеь1ие () ) ) Эта программа дает следующий результат: Положительные значения меньше 10: 1 3 б 9 Как видите, по данному запросу извлекаются только положительные значения меньше 10.
Этот результат достигается благодаря двум следующим операторам ы)тете: ниеге п > 0 нпеге п < 10 Условие в первом операторе ыпеге требует, чтобы элемент массива был больше нуля. А условие во втором операторе ыпеге требует, чтобы элемент массива был меньше 10. Следовательно, запрашиваемый элемент массива должен находиться в пределах от 1 до 9 (включительно), чтобы удовлетворять обоим условиям.
В таком применении двух операторов ыЬеге для отбора данных иет ничего дурного, ио аналогичного эффекта можно добиться с помощью более компактно составленного условия в единственном операторе ыпеге. Ниже приведен тот же самый запрос, переформированный по этому принципу. чаг рояппюя = Ггою и 1п ппюв ыпеге и > 0 аа и < 10 яе1есг пл Как правило, в условии оператора ыпеге разрешается использовать любое допустимое в С)) выражение, дающее булев результат. Например, в приведенной ниже программе определяется массив символьных строк. В ряде этих строк содержатся адреса Иитериега. По запросу в переменой песлййгя извлекаются только те строки, которые содержат более.
четырех символов и оканчиваются на Свес". Следовательно, по данному запросу обнаруживаются строки, содержащие адреса Интернета с именем . пег домена самого верхнего уровня. // Продемонстрировать применение еще одного оператора ыпеге. пя1пд Эуясеюл пягпс Яуясещ.11пял с1аяя ИЛегепещо2 ( всасгс чотй Матп () ( яггтпч() яггя =( ".сощ", ".пег", "ляиащеА.сощ", "ляиащеВ.пег", лЕЕяс", ".ПЕГЫОГХ",чпяиащЕС.ПЕГ", "ЛяиащЕП.СОщч ); // Сформировать запрос на получение адресов // Интернета, оканчивающихся на .пес. чаг песлййгя = Ггощ аййг тп ясгя ЫЛЕГЕ аййГ.ЬЕПЧГЛ > 4 аа аййх.клйяп1ГЛ(".ПЕГч) яе1есс аййг; // Выполнить запрос и вывести его результаты.
Гогеасп(чаг ясг тп песаййгя) Сопяо1е.яггсеьгпе(ясг) ) ) Вот к какому результату приводит выполнение этой программы: Ляпаюев.пес Ляпаюес.пег Обратите внимание иа то, что в операторе ипеге данной программы используется один из методов обработки символьных строк под названием Впйяитсп () . Ои возвращает логическое значение ггпе, если вызывающая его строка оканчивается последовательиостью символов, указываемой в качестве аргумента этого метода. 620 Часть (. Язык С» Сортировка результатов запроса с помощью оператора охйехЬу Зачастую результаты запроса требуют сортировки.
Допустим, что требуется получить список просроченных счетов по порядку остатка на счету: от самого большого до самого малого, или же список имен заказчиков в алфавитном порядке. Независимо от преследуемой цели, результаты запроса можно очень легко отсортировать, используя такое средство Е1)ь)(2, как оператор огс(егЬу. Оператор огс(егЬу можно использовать для сортировки результатов запроса по одному или нескольким критериям. Рассмотрим для начала самый простой случай сортировки по одному элементу.
Ниже приведена общая форма оператора огк(егпу для сортировки результатов запроса по одному критерию. огк(егЬу элемент порядок где элемент обозначает конкретный элемент, по которому производится сортировка. Это может быть весь элемент, хранящийся в источнике данных, илн только часть одного поля в данном элементе. А порядок обозначает порядок сортировки по нарастающей или убывающей с обязательным добавлением ключевого слова азсепс(1пд или с(езсепс(1пд соответственно. По умолчанию сортировка производится по нарастающей, и поэтому ключевое слово азсепй»пд, как правило, не указывается.
Ниже приведен пример программы, в которой оператор огс(егпу используется для извлечения значений из массива типа 1пг по нарастающей. // Продемонстрировать применение оператора огк(егюу. изглд Зузгею; из1лд Зузгею.11лйк с1аэз Огк)егЬупеюо ( згагас томв Мако() ( глг() пище = ( 10, -19, 4, 7, 2, -5, 0 ); // Сформировать запрос ла получение значений в // отсортированном порядке.
тиг розилщз = Ггощ л 1п лыщз огоегЬу п зе1есс л; Солзо1е.итаке("Значения по нарастающей: "); // Выполнить запрос и вывести его результаты. ГогеасЬ(алг 1 кл розыиюз) Сопзо1е.иг1ге(1 т " ") Солзо1е.игксепкпе()," ) ) При выполнении этой программы получается следующий результат: Значения по нарастающей: -19 -5 О 2 4 7 10 Глава (9. Ь)И0 621 Для того чтобы изменить порядок сортировки по нарастающей на сортировку по убывающей, достаточно указать ключевое слово с[еясепс1пд, как показано ниже.
тат рояииыя = Ггои и Ьп опия огсегпу и Севсеподпч ве1есс и; Попробовав выполнить этот запрос, вы получите значения в обратном порядке. Зачастую сортировка результатов запроса производится по единственному критерию. Тем не менее для сортировки по нескольким критериям служит приведенная ниже форма оператора ог4(егЬу. огсегпу элемент А направление, элемент В направление, элемент С направление, В данной форме элемент л обозначает конкретный элемент, по которому производится основная сортировка; элемент  — элемент, по которому производится сортировка каждой группы эквивалентных элементов; элемент С вЂ” элемент, по которому производится сортировка всех этих групп, и т.д. Таким образом, каждый последующий элемент обозначает дополнительный критерий сортировки.
Во всех этих критериях указывать пав правление сортировки необязательно, но по умолчанию сортировка производится по нарастающей. Ниже приведен пример программы, в которой сортировка информации о банковских счетах осуществляется по трем критериям: фамилии, имени и остатку на счете. // Сортировать результаты запроса по нескольким // критериям, используя оператор огоегЬу. пвтп9 Яуясеж4 пяапч зуясеи.ЬЬпгп с1авв Ассоппс ( рпь11с вггдпч 81гвгнаее ( чег; ргаеаге вег; ) рпЫ1с всг1пч Ьавсиаие ( 9ес) ргдуаге вес; ) рпЫЬс г(опЫе Ва1апсе ( 9ес; ргттасе яег) рпЫЬс вггтпч АссоппсишзЬег ( 9ес4 Рг1таге вес4 ) рпы1с Ассоппг(вгг1пд гп, ягг1пч 1п, ягг1п9 ассизи, попые Ы ( Рв гвсиаие = Гп) Ьавсиаие = 1п) АссоппсишпЬег = ассппи; Ва1апсе = Ьг ) ) с1аяя ОгсегпуОеео ( вгагтс того иагп () ( // Сформировать исходные данные.
Ассоппс[) ассоппсв = ( пек Ассоипс("том", "Смит", "132СК", 100.23), пеы Ассоппс("том", "Смит", "132СО", 10000.00), пеы Ассоппс("Ральф", "Джонс", "436СВ", 1923.85), пеы Ассоппс("Ральф", "Джонс", "454ИМ", 987.132), пеы Ассоппс("тед", "Краммер", "89700", 3223.19), 622 часть!. язык С» пен Ассоипо("Ральф", "Джонс", "434СК", -123.32), пен Ассоцпо("Сара", "Смит", "543ММ", 5017.40), пен Ассонпк("Сара", "Смит", "54700", 34955.79), пен Ассоцпк("Сара", "Смит", "843СК", 345.00), пен Ассоцпк("Альберт", "Смит", "445СК", -213.67), пен Ассоипк("Бетти", "Краммер","968ММ",5146.67), пен Ассочпк("Карл", "Смит", "078СО", 15345.99), пен Ассоппк("Дженни", "Джонс", "108СК", 10.98) )( // Сформировать запрос на получение сведений о // банковских счетах в отсортированном порядке.
// Отсортировать зти сведения сначала по имени, // затем по фамилии и, наконец, по остатку на счете. час асс1пто = Гсов асс 1п ассоцпов отбетЬу асс.Ьавкиаве, асс.Г1гвоиаве, асс.Ва1апсе ве1есс асст Сопво1е.ыт1кеЬ1пе("Счета в отсортированном порядке: ")г встало вьс // Выполнить запрос и вывести его результаты. Готеасп(ассоцпк асс Ьп асс1пто) ( 11(вот (= асс.ГЬтвкиаве) ( Сопао1е.ит1кеЬЬпе()т вот = асс.ГЬтвснаве( ) Сопво1е.ыт1кеЬ1пе("(О), (1)1киомер счета." (2], (3,10:С)", асс.ьавкиаве, асс.Г1гзснаве, асс. Ассоцпкицвоег, асс.Ва1апсе)г ) Сопво1е.ыгаквпфпе()т ) Ниже приведен результат выполнения этой программы. Счета в отсортированном порядке: Джонс, Дженни Номер счета: 108СК, $10.98 Номер счета: 434СК, ($123.32) Номер счета: 454ММ, $987.13 Номер счета: 436СО, $1, 923.85 Джонс, Ральф Джонс, Ральф Джонс, Ральф краммер, Бетти Номер счетаг 968ММ, $5,146.67 Краммер, тед Смит, Альберт Смит, Карл Номер счета: 897СО, $3,223.19 Номер счета: 445СК, ($213.67) Номер счета: 078СО, $15,345.99 Глава 19.
Виа 623 Смит, Сара Смит, Сара Смит, Сара Номер счета; 132СК, $100.23 Номер счета: 13200, $10,000.00 Смит, том Смит, том Внимательно проанализируем оператор огс)егЬу в следующем запросе из приведенной выше программы: наг асс1пто = Ггои асс гп ассонпгв огоегоу асс.Ьавсиаме, асс,гггвснаже,асс.на1апсе ве1есс ассь Сортировка результатов этого запроса осуществляется следующим образом. Сначала результаты сортируются по фамилии, затем элементы с одинаковыми фамилиями сортируются по имени. И наконец, группы элементов с одинаковыми фамилиями и именами сортируются по остатку на счете. Именно поэтому список счетов вкладчиков по фамилии Джонс выглядит так; Джонс, Дженни Номер счета: 108СК, $10.98 Как показывает результат выполнения данного запроса, список счетов отсортирован сначала по фамилии, затем по имени и, наконец, по остатку на счете.