Г. Шилдт - С#4.0 Полное руководство (1160795), страница 151
Текст из файла (страница 151)
Массив )геуя содержит ключи сортировки, а массив 1 сотая — значения, связанные с этими ключами. Следовательно, оба массива должны содержать пары "ключ-значение". После сортировки элементы обоих массивов располагаются в заданных и ределах по порядку возрастания ключей Сортирует по нарастающей два одномерных массива в заданных пределах, начиная с элемента, указываемого по индексу Тпс(ех, и включая число элементов, определяемых параметром 1епдсл. Массив )теуя содержит ключи сортировки, а массив 1 Сетя — значения, связанные с этими ключами.
Следовательно, оба массива должны содержать пары "ключ-значение". После сортировки элементы обоих массивов располагаются в заданных пределах по порядку возрастания ключей Сортирует по нарастающей два одномерных массива в заданных пределах, начиная с элемента, указываемого по индексу тп<(ех, и включая число ЭЛЕМЕНТОВ, ОПрЕдЕЛяЕМЫХ ПараМЕтрОМ 1епдСЛ, а также используя способ сравнения, задаваемый параметром сотрагег. Массив )геуя содержит ключи сортировки, а массив тсетя — значения, связанные с этими ключами.
Следовательно, эти два массива должны содержать пары "ключ- значение". После сортировки элементы обоих массивов располагаются в заданных пределах по порядку возрастания ключей Сортирует по нарастающей два одномерных массива в заданных пределах, начиная с элемента, указываемого по индексу 1пт(ех, и включая число элементов, определяемых параметром 1епдсЛ, а также используя способ сравнения, задаваемый параметром сопрягег. Массив )геуя содержит ключи сортировки,.
а массив 1Сетоя — значения, связанные с этими ключами. Следовательно, эти два массива должны содержать пары."ключ- значение". После сортировки элементы обоих массивов располагаются в заданных пределах по порядку возрастания ключей Глава 21. Пространство имен Зуя[ев) 763 Окончание табл. 21.12 Метод Назначение рп)711с яаааТС ЬОО1 ТгпеуогА11<Т>(Т[) аггау, Ргеагсаае<Т> ваааЛ) Возвращает логическое значение ггпе, если все элементы массива аггау удовлетворяют условию предиката, задаваемого параметром ва ЯСЛ. Если один или более элементов этого массива не удовлетворяют заданному условию, то возвращается логическое значение та1яе Сортировка и поиск в массивах О Отаартираяять массив я найти я яем значение. пяапс Яуятев! с1яяя Яагсоява ( яаягга чаха( На1п() Тпа() ппвя = ( 5, 4, б, 3, 14, 9, 8, 17, 1, 24, -1, О 7/ Отобразить исходный порядок следования.
Сапяа1е.иггае("Исходный порядок следования: "); Гагеаап(гпа г 1п ппвя) Сапяа1е.нгвае(1 + " ") 1 Сапяа1е.нггаевгпе(); О Отсортировать массив. Аггау.бога(ппвя); Отобразить порядок следования после сортировки. Сапяа1е.нг1ге("Порядок следования после сортировки: ")г Гагеаан(гпа 1 Тп пава) Сапяа1е.нггае(1 Сспяа1е. Иггаеввпе () 1 7! Найти значение 14. гпа Ых = Аггяу.81пагузеагап(ппвя, 14); Сапяа1е.нгьаебгпе("Индекс элемента маасияа са значением 14: гс(х) 1 Вот к какому результату приводит выполнение этой программы.
Исходный порядок аледаяаяия: 5 4 б 3 14 9 8 17 1 24 -1 О Порядок следования паоле сортировки: -1 О 1 3 4 5 б 8 9 14 17 24 Индекс элемента массива са значением 14: 9 Содержимое массива нередко приходится сортировать. Для этой цели в классе Аггау предусмотрен обширный ряд сортирующих методов. Так, с помощью разных вариантов метода яогг () можно отсортировать массив полностью или в заданных пределах либо отсортировать два массива, содержащих соответствующие пары "клкгч-значение". После сортировки в массиве можно осуществить эффективный поиск, используя разные варианты метода 81пагузеагсЛ () .
В качестве примера ниже приведена программа, в которой демонстрируется применение методов Яогг () и ВТпагубеагаЛ () для сортировки и поиска в массиве значений типа 1пг. 764 Часть П. Библиотека С№ В приведенном выше примере массив состоит из элементов типа 1пс, который относится к категории типов значений. Все методы, определенные в классе Аггау, автоматически доступны для обработки массивов всех встроенных в С() типов значений. Но в отношении массивов ссылок на объекты это правило может и не соблюдаться.
Так, для сортировки массива ссылок на объекты в классе типа этих объектов должен быть реализован интерфейс 1СоврагаЬ1е или |СоврагаЫе<Т>. Если же ни один из этих интерфейсов не реализован в данном классе, то во время выполнения программы может возникнуть исключительная ситуация в связи с попыткой отсортировать подобный массив или осуществить в нем поиск.
Правда, реализовать оба интерфейса, 1СоврагаЫе и 1СоврагаЬ1е<Т>, совсем нетрудно. В интерфейсе 1СоврагаЬ1е определяется один метод. гпс СоврагеТо(оЬЗесс об№) В этом методе значение вызывающего объекта сравнивается со значением объекта, определяемого параметром ОЬт| Если значение вызывающего объекта больше, чем у объекта ОЬ7', то возвращается положительное значение; если оба значения равны— нулевое значение, а если значение вызывающего объекта меньше, чем у объекта оЬ~,— отрицательное значение.
Интерфейс 1соврагаЫе<Т> является обобщенным вариантом интерфейса 1СоврагаЫе. Поэтому в нем определен следующий обобщенный вариант метода СоврагеТо(). гпс СощрагеТо(Т огяег) Обобщенный вариант метода Соврагето () действует аналогично необобщенному его варианту. В нем значение вызывающего объекта также сравнивается со значением объекта, определяемого параметром о СЛег. Если значение вызывающего объекта больше, чем у объекта о СЛ ег, то возвращается положительное значение; если оба значения равны — нулевое значение, а если значение вызывающего объекта меньше, чем у объекта осЛег, — отрицательное значение. Преимущество интерфейса 1СоврагаЬ1е<т> заключается в том, что он обеспечивает типовую безопасность, поскольку в этом случае тип обрабатываемых данных указывается явным образом, а следовательно, никакого приведения типа ОЬп есг сравниваемого объекта к нужному типу не требуется. В качестве примера ниже приведена программа, в которой демонстрируются сортировка и поиск в массиве объектов определяемого пользователем класса.
Отсортировать массив объектов и осуществить в нем поиск. пягпс Буяяеки с1аяя МуС1аяя : 1СоврагаЫе<МуС1аяя> ( риЫ1с гв рнЫгс МуС1аяя (гпс х) ( г = х; ) Реализовать интерфейс 1СоврагаЫе<иуС1аяя>. роЬ1гс гпс СощрагеТо(МуС1авя т) ( гегогп г — и.1; ) рпЬ1гс Ьоо1 Ейпа1я (Мус1аяя т) ( гегвгп 1 == т.гг ) Глава 21. Пространство имен Був1егв 765 с1ая* Яогпоеио ( япапгс тоге Ма1п() ( МуС1аяя[] ппия = пен МуС1аяя[5]; МуС1аяя(5); М)'С1аяя(2); М) С1аяя (3); Муо). (4); МуС1аяя(1); опия [0) ппия [1] поия(2] опия(3] п1.япя [4] = пен = пен = пен = пен = пен Отобразить исходный порядок следования. Сопяо1е.иггпе("Исходный порядок следования: ") Гегелей(муС1аяя о гп ппмя) Сопяо1е.иггпе(о.г + " "); Сопяо1е.нггпеьлпе(); Отсортировать массив. Лггау.яогп(ппия)г Отобразить порядок следования после сортировки.
Сопяо1е.нггсе("Порядок следования после сортировки: Гогеасн(мус1аяя о 1п ппгпя) Сопяо1е.нг].се (а.1 + " "); Сопяо1е.нг1сеЬгпе()г О Найти объект МуС1аяя(2). МуС1аяя х = пен МуС1аяя(2); 1пс збх = Лггау.вгпагузеагсн(ппия, х)," Сопяо1е.иг1пеъгпе("Индекс элемента массива с объектом МуС1аяя(2): 1бх); При выполнении этой программы получается следующий результат. Исходньй порядок следования: 5 2 3 4 1 Порядок следования после сортировки: 1 2 3 4 5 Инпекс элемента массива с объектом МуС1аяя(2): 1 ПРИМЕЧАНИЕ Более подробно особенности сравнения строк рассматриваются в главе 22.
При сортировке или поиске в массиве строк может возникнуть потребность явно указать способ сравнения символьных строк. Так, если массив будет сортироваться с использованием одних настроек культурной среды, а поиск в нем — с помощью других настроек, то во избежание ошибок, скорее всего, придется явно указать способ сравнения.
Аналогичнал ситуация возникает и в том случае, если требуется отсортировать массив символьных строк при настройках культурной среды, отличающихся от текущих. Для выхода из подобных ситуаций можно передать экземпляр объекта типа Вбг1пгзсогпрагег параметру типа 1Сопграгег, который поддерживается в целом ряде перегружаемых вариантов методов Яогс () и В1пагуЯеагс)г () . 7бб Часть (1. Библиотека С(( Класс Бтг1прСоврагег объявляется в пространстве имен Бузтев и реализует, среди прочего, интерфейсы 1Совратег и 1Совра гет<Т>.
Поэтому экземпляр объекта типа БтгтпдСоврагег может быть передан в качестве аргумента параметру типа 1Соврагег. Кроме того, в классе Бсг1пдСовра тег определен ряд доступных только для чтения свойств, возвращающих экземпляр объекта типа Бтг1поСоврагег и поддерживающих различные способы сравнения символьных строк.
Все эти свойства перечислены ниже. Способ сравнения Свойство С учетом регистра и культурной среды Передавая явным образом экземпляр объекта типа Бсг1поСовратег, можно совершенно однозначно определить порядок сортировки или поиска в массиве. Например, в приведенном фрагменте кода сортировка и поиск в массиве символьных строк осугцествляется с помощью свойства Б с ге поСоврагег. Ого(1па1. зтт1пд() зСтз = ( "хух", "опе", "ЬеСа", "А1рьа" ); О Агтау.ЯотС(зтгз, Ятг1пчсовратег.отб1па1); ьпс 1бх = Аттау.вьпатуЯеатсЬ(зтгз, "Ьеса", Ятт1пдсовратет.отбгпа1)г Обращение содержимого массива Иногда оказывается полезно обратить содержимое массива и, в частности, отсортировать по убывающей массив, отсортированный по нарастающей.