Programming Taskbook 0
Download 1.62 Mb. Pdf ko'rish
|
Abramyan-Pascal2016-1
- Bu sahifa navigatsiya:
- Поиск Методы array of T Find
Глава 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: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling