Programming Taskbook 0
Download 1,62 Mb. Pdf ko'rish
|
Abramyan-Pascal2016-1
- Bu sahifa navigatsiya:
- Array7 ); // Вариант 5 var a := ReadArrReal; a.Slice(a.Length - 1, -1).Write; Задачу Array12
- Array12 ); // Вариант 2
Глава 3. Массивы и последовательности 59 Для последовательностей аналогичную конструкцию для срезов при- менять нельзя, так как у последовательностей отсутствует операция индек- сирования. Однако срез для последовательности (в виде новой последова- тельности) можно получить с помощью специального запроса Slice со сле- дующими параметрами: a.Slice(from, step: integer[; count: integer]); Здесь from и step, как и раньше, означают соответственно индекс начального элемента среза и шаг, а необязательный параметр count означа- ет наибольшее количество элементов, добавляемых в срез (размер полу- ченного среза может быть меньше, чем count, если в исходной последова- тельности окажется недостаточно элементов). Важным дополнительным ограничением запроса Slice для последовательностей является то, что шаг step всегда должен быть положительным. Запрос Slice (как и любые другие запросы для последовательностей) можно также применять к массивам и другим коллекциям. При этом для массивов, списков List и текстовых строк предусмотрены особые реализа- ции этого запроса, в которых шаг step может быть как положительным, так и отрицательным. Поскольку для последовательностей шаг step в запросе Slice не может быть отрицательным, мы не сможем использовать этот запрос при реше- нии задачи Array7 с помощью последовательностей. Однако применить аналогичный запрос для массивов вполне допустимо, хотя полученное ре- шение будет более длинным, чем то, которое использовало срезы в виде индексов (прежде всего, из-за необходимости явного указания начального индекса, равного индексу последнего элемента массива): Task('Array7'); // Вариант 5 var a := ReadArrReal; a.Slice(a.Length - 1, -1).Write; Задачу Array12, в которой требуется получить срез с положительным шагом, вполне можно решить с помощью последовательности: Task('Array12'); // Вариант 2 ReadSeqReal.Slice(1, 2).Write; 60 Глава 4. Запросы При обсуждении в предыдущей главе базовых средств работы с мас- сивами и последовательностями мы неоднократно отмечали, что основным способом обработки последовательностей является применение к ним за- просов — методов, возвращающих преобразованную последовательность или какие-либо характеристики исходной последовательности. В качестве примеров мы использовали запросы Select, Sum, Take, Reverse, Slice и убеж- дались, что применение подобных запросов приводит к краткому и наглядному коду. Однако для эффективной обработки последовательностей (а также любых коллекций) с помощью запросов необходимо знать, какие запросы предусмотрены в PascalABC.NET, каковы их особенности и дополнитель- ные возможности. Этим вопросам и посвящена данная глава. В ней рас- сматриваются как запросы, входящие в стандартную библиотеку платфор- мы .NET, так и дополнительные запросы, реализованные в библиотеке PascalABC.NET. Исключены из рассмотрения лишь запросы AsEnumerable, Cast и OfType, входящие в стандартную библиотеку .NET, поскольку два первых запроса используются крайне редко, а описание особенностей применения запроса OfType требует привлечения понятий объектно-ориентированного про- граммирования, выходящих за рамки настоящего пособия (по поводу этих запросов см., например, [3, п. 10.3.7, 10.3.8]). Кроме того, не обсуждаются особенности вариантов запросов, содержащих параметры типа IComparer или IEqualityComparer, поскольку эти типы также не рассматриваются в дан- ном пособии (см. [3, п. 8.6, 9.7]). Отметим лишь, что параметры типа ICom- parer входят в варианты запросов OrderBy, OrderByDescending, ThenBy, Then- ByDescending (см. п. 4.2), а параметры типа IEqualityComparer — в варианты запросов Contains, SequenceEqual (п. 4.1), Distinct, Union, Intersect, Except (п. 4.2), Join, GroupJoin (п. 4.4), GroupBy (п. 4.5), ToDictionary, ToLookup (п. 4.6). Эти необязательные параметры всегда указываются последними в списке параметров соответствующего запроса. |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2025
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling