Programming Taskbook 0


Download 1.62 Mb.
Pdf ko'rish
bet36/71
Sana21.06.2023
Hajmi1.62 Mb.
#1644761
TuriУчебное пособие
1   ...   32   33   34   35   36   37   38   39   ...   71
Bog'liq
Abramyan-Pascal2016-1


Глава 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). 
Эти необязательные параметры всегда указываются последними в списке 
параметров соответствующего запроса.


Download 1.62 Mb.

Do'stlaringiz bilan baham:
1   ...   32   33   34   35   36   37   38   39   ...   71




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling