Programming Taskbook 0


Download 1.62 Mb.
Pdf ko'rish
bet64/71
Sana21.06.2023
Hajmi1.62 Mb.
#1644761
TuriУчебное пособие
1   ...   60   61   62   63   64   65   66   67   ...   71
Bog'liq
Abramyan-Pascal2016-1


Глава 5. Дополнительные средства обработки массивов 
105 
библиотеке PascalABC.NET предусмотрен более обширный набор методов. 
Перечислим эти методы, предполагая, что они применяются к массиву ти-
па array of T: 
Поиск 
Методы array of T
 
Find(pred: T -> boolean): T 
FindLast(pred: T -> boolean): T 
FindAll(pred: T -> boolean): array of T 
FindIndex([start: integer;] pred: T -> boolean): integer 
FindLastIndex([start: integer;] pred: T -> boolean): integer 
IndexOf(x: T [; start: integer]): integer 
LastIndexOf(x: T [; start: integer]): integer 
IndexMax([start: integer]): integer 
LastIndexMax([start: integer]): integer 
IndexMin([start: integer]): integer 
LastIndexMin([start: integer]): integer 
Методы Find и FindLast выполняются аналогично запросам FirstOrDefault 
и LastOrDefault: они возвращают соответственно первый и последний эле-
менты массива, удовлетворяющие предикату pred, или нулевое значение 
типа T, если массив не содержит требуемых элементов. При поиске в мас-
сиве следует использовать именно эти методы, а не аналогичные им по 
назначению запросы последовательностей, так как методы массивов вы-
полняются быстрее.
Вызов метода a.FindAll(pred) возвращает массив, содержащий все эле-
менты массива a, удовлетворяющие предикату pred. Он может рассматри-
ваться как аналог цепочки из двух запросов вида a.Where(pred).ToArray и вы-
полняется с такой же скоростью. 
Все прочие методы поиска для массивов не имеют аналогов среди за-
просов, так как возвращают индексы найденных элементов. Ищется индекс 
либо первого/последнего элемента, удовлетворяющего указанному преди-
кату pred (методы FindIndex и FindLastIndex), либо элемента с указанным зна-
чением x (методы IndexOf и LastIndexOf); если требуемые элементы отсут-
ствуют, то все эти методы возвращают особое значение –1. К этой же 
группе можно отнести методы IndexMax, LastIndexMax, IndexMin, LastIndexMin, 
позволяющие найти индекс первого/последнего максимального или мини-
мального элемента массива.
У всех методов, возвращающих индекс найденного элемента массива, 
предусмотрен дополнительный параметр start, позволяющий выполнять 
поиск, начиная с элемента с индексом start. Для методов, просматриваю-
щих массив с начала в поисках первого подходящего элемента, индекс start 
по умолчанию считается равным 0, для методов, просматривающих массив 


106 
с конца в поисках последнего подходящего элемента, индекс start по умол-
чанию считается равным N – 1, где N обозначает размер массива.
Использование параметра start позволяет организовать в цикле поиск 
индексов всех требуемых элементов как в возрастающем, так и в убываю-
щем порядке. Например, чтобы напечатать индексы всех элементов масси-
ва a, равных значению x, можно использовать следующий фрагмент: 
var i := a.IndexOf(x); 
while i <> -1 do 
begin 
Print(i); 
i := a.IndexOf(x, i + 1); 
end; 
Для того чтобы подобные фрагменты всегда успешно завершались, в 
методах FindIndex и IndexOf разрешено в качестве start указывать не только 
допустимые индексы от 0 до N – 1 (где N — размер массива), но и значе-
ние N, при указании которого всегда возвращается –1. К сожалению, для 
методов FindLastIndex и LastIndexOf нельзя указывать значение параметра 
start, равное –1, что не позволяет организовать поиск всех требуемых эле-
ментов в обратном порядке так же просто, как и в прямом. 
Для методов, связанных с нахождением индексов максимальных и 
минимальных элементов, использование параметра start позволяет найти 
индекс максимального или минимального элемента в указанной части 
массива (при этом значение соответствующего элемента может отличаться 
от значения максимума или минимума для массива в целом). В данном 
случае start может содержать только допустимые индексы массива. 
Пример: 
var a := Arr(1, 2, 3, 4, 5); 
for var i := 0 to a.Length - 1 do 
Print(a.IndexMin(i)); // 0 1 2 3 4 
Если требуется проверить сам факт наличия в массиве a элемента со 
значением x и не требуется определять его индекс, то соответствующую 
проверку можно записать максимально коротким способом, используя вы-
ражение x in a, которое возвращает значение True, если x содержится в мас-
сиве a, и False в противном случае.
В дополнение к рассмотренным выше средствам поиска, для массивов 
предусмотрены еще два специализированных метода: 

Download 1.62 Mb.

Do'stlaringiz bilan baham:
1   ...   60   61   62   63   64   65   66   67   ...   71




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