Spec-Zone.ru › OCaml 4.14

Модуль Массив

module Array: sig .. end

Операции с массивами.

Помеченная версия этого модуля может использоваться, как описано в модуле StdLabels.

type 'a t = 'a array 

Псевдоним для типа массивов.

val length : 'a array -> int

Возвращает длину (количество элементов) данного массива.

val get : 'a array -> int -> 'a

get a n возвращает элемент с номером n массива a. Первый элемент имеет номер 0. Последний элемент имеет номер length a - 1. Вы также можете использовать a.(n) вместо get a n.

  • Исключения Invalid_argument если n находится вне диапазона от 0 до (length a - 1).
val set : 'a array -> int -> 'a -> unit

set a n x изменяет массив a на месте, заменяя элемент с номером n на x. Вы также можете использовать a.(n) <- x вместо set a n x.

  • Исключения Invalid_argument если n находится вне диапазона от 0 до length a - 1.
val make : int -> 'a -> 'a array

make n x возвращает новый массив длины n, инициализированный значением x. Все элементы этого нового массива изначально физически равны x (в смысле предиката ==). Следовательно, если x изменяем, он совместно используется всеми элементами массива, и изменение x через одну из ячеек массива изменит все другие ячейки одновременно.

  • Исключения Invalid_argument если n < 0 или n > Sys.max_array_length . Если значение x — число с плавающей точкой, то максимальный размер составляет только Sys.max_array_length / 2.
val create : int -> 'a -> 'a array
Устарело. create — псевдоним для Array.make.
val create_float : int -> float array

create_float n возвращает новый массив чисел с плавающей точкой длины n, с неинициализированными данными.

  • С 4.03
val make_float : int -> float array
Устарело. make_float — псевдоним для Array.create_float.
val init : int -> (int -> 'a) -> 'a array

init n f возвращает новый массив длины n, с элементом с номером i инициализированным результатом f i. Другими словами, init n f табулирует результаты f, применённые к целым числам от 0 до n-1.

  • Исключения Invalid_argument если n < 0 или n > Sys.max_array_length . Если возвращаемый тип f — float, то максимальный размер составляет только Sys.max_array_length / 2.
val make_matrix : int -> int -> 'a -> 'a array array

make_matrix dimx dimy e возвращает двумерный массив (массив массивов) с первой размерностью dimx и второй размерностью dimy . Все элементы этой новой матрицы изначально физически равны e . Элемент (x,y) матрицы m доступен с помощью обозначения m.(x).(y).

  • Исключения Invalid_argument если dimx или dimy отрицательные или больше Sys.max_array_length. Если значение e — число с плавающей точкой, то максимальный размер составляет только Sys.max_array_length / 2.
val create_matrix : int -> int -> 'a -> 'a array array
Устарело. create_matrix — псевдоним для Array.make_matrix.
val append : 'a array -> 'a array -> 'a array

append v1 v2 возвращает новый массив, содержащий конкатенацию массивов v1 и v2.

  • Исключения Invalid_argument если length v1 + length v2 > Sys.max_array_length.
val concat : 'a array list -> 'a array

То же самое, что и Array.append, но конкатенирует список массивов.

val sub : 'a array -> int -> int -> 'a array

sub a pos len возвращает новый массив длиной len, содержащий элементы с номерами от pos до pos + len - 1 массива a.

  • Исключения Invalid_argument если pos и len не обозначают допустимый подмассив a; то есть если pos < 0, или len < 0, или pos + len > length a.
val copy : 'a array -> 'a array

copy a возвращает копию a, т.е. новый массив, содержащий те же элементы, что и a.

val fill : 'a array -> int -> int -> 'a -> unit

fill a pos len x изменяет массив a на месте, сохраняя x в элементах с номерами от pos до pos + len - 1.

  • Исключения Invalid_argument если pos и len не обозначают допустимый подмассив a.
val blit : 'a array -> int -> 'a array -> int -> int -> unit

blit src src_pos dst dst_pos len копирует len элементов из массива src, начиная с элемента с номером src_pos, в массив dst, начиная с элемента с номером dst_pos. Он работает корректно, даже если src и dst — один и тот же массив, а фрагменты исходного и целевого массивов перекрываются.

  • Исключения Invalid_argument если src_pos и len не обозначают допустимый подмассив src, или если dst_pos и len не обозначают допустимый подмассив dst.
val to_list : 'a array -> 'a list

to_list a возвращает список всех элементов a.

val of_list : 'a list -> 'a array

of_list l возвращает новый массив, содержащий элементы l.

  • Исключения Invalid_argument если длина l больше Sys.max_array_length.

Итераторы

val iter : ('a -> unit) -> 'a array -> unit

iter f a применяет функцию f поочерёдно ко всем элементам a. Это эквивалентно f a.(0); f a.(1); ...; f a.(length a - 1); ().

val iteri : (int -> 'a -> unit) -> 'a array -> unit

То же самое, что и Array.iter, но функция применяется к индексу элемента в качестве первого аргумента, а сам элемент - как второй аргумент.

val map : ('a -> 'b) -> 'a array -> 'b array

map f a применяет функцию f ко всем элементам a и строит массив с результатами, возвращёнными f: [| f a.(0); f a.(1); ...; f a.(length a - 1) |].

val mapi : (int -> 'a -> 'b) -> 'a array -> 'b array

То же самое, что и Array.map, но функция применяется к индексу элемента в качестве первого аргумента, а сам элемент - как второй аргумент.

val fold_left : ('a -> 'b -> 'a) -> 'a -> 'b array -> 'a

fold_left f init a вычисляет f (... (f (f init a.(0)) a.(1)) ...) a.(n-1), где n — длина массива a.

val fold_left_map : ('a -> 'b -> 'a * 'c) -> 'a -> 'b array -> 'a * 'c array

fold_left_map — это комбинация Array.fold_left и Array.map, которая передаёт аккумулирующее значение через вызовы f.

  • С 4.13.0
val fold_right : ('b -> 'a -> 'a) -> 'b array -> 'a -> 'a

fold_right f a init вычисляет f a.(0) (f a.(1) ( ... (f a.(n-1) init) ...)), где n — длина массива a.

Итераторы по двум массивам

val iter2 : ('a -> 'b -> unit) -> 'a array -> 'b array -> unit

iter2 f a b применяет функцию f ко всем элементам a и b.

  • С 4.03.0 (4.05.0 в ArrayLabels)
  • Исключения Invalid_argument если массивы не одинаковой длины.
val map2 : ('a -> 'b -> 'c) -> 'a array -> 'b array -> 'c array

map2 f a b применяет функцию f ко всем элементам a и b, и строит массив с результатами, возвращёнными f: [| f a.(0) b.(0); ...; f a.(length a - 1) b.(length b - 1)|].

  • С 4.03.0 (4.05.0 в ArrayLabels)
  • Исключения Invalid_argument если массивы не одинаковой длины.

Сканирование массива

val for_all : ('a -> bool) -> 'a array -> bool

for_all f [|a1; ...; an|] проверяет, удовлетворяют ли все элементы массива предикату f. То есть, возвращает (f a1) && (f a2) && ... && (f an).

  • С 4.03.0
val exists : ('a -> bool) -> 'a array -> bool

exists f [|a1; ...; an|] проверяет, удовлетворяет ли хотя бы один элемент массива предикату f. То есть, он возвращает (f a1) || (f a2) || ... || (f an).

  • Since 4.03.0
val for_all2 : ('a -> 'b -> bool) -> 'a array -> 'b array -> bool

То же, что и Array.for_all, но для предиката с двумя аргументами.

  • Since 4.11.0
  • Raises Invalid_argument если у двух массивов разная длина.
val exists2 : ('a -> 'b -> bool) -> 'a array -> 'b array -> bool

То же, что и Array.exists, но для предиката с двумя аргументами.

  • Since 4.11.0
  • Raises Invalid_argument если у двух массивов разная длина.
val mem : 'a -> 'a array -> bool

mem a set истинно тогда и только тогда, когда a структурно равен элементу l (т.е. существует элемент x в l, такой что compare a x = 0).

  • Since 4.03.0
val memq : 'a -> 'a array -> bool

То же, что и Array.mem, но использует физическое равенство вместо структурного равенства для сравнения элементов списка.

  • Since 4.03.0
val find_opt : ('a -> bool) -> 'a array -> 'a option

find_opt f a возвращает первый элемент массива a , удовлетворяющий предикату f, или None если в массиве a нет значения, удовлетворяющего f.

  • Since 4.13.0
val find_map : ('a -> 'b option) -> 'a array -> 'b option

find_map f a применяет f к элементам a в порядке следования и возвращает первый результат вида Some v, или None если таковых не существует.

  • Since 4.13.0

Массивы пар

val split : ('a * 'b) array -> 'a array * 'b array

split [|(a1,b1); ...; (an,bn)|] является ([|a1; ...; an|], [|b1; ...; bn|]).

  • Since 4.13.0
val combine : 'a array -> 'b array -> ('a * 'b) array

combine [|a1; ...; an|] [|b1; ...; bn|] является [|(a1,b1); ...; (an,bn)|]. Вызвать Invalid_argument если у двух массивов разная длина.

  • Since 4.13.0

Сортировка

val sort : ('a -> 'a -> int) -> 'a array -> unit

Сортирует массив в порядке возрастания согласно функции сравнения. Функция сравнения должна возвращать 0, если ее аргументы равны, положительное целое число, если первый больше, и отрицательное целое число, если первый меньше (полная спецификация приведена ниже). Например, compare — подходящая функция сравнения. После вызова sort, массив сортируется на месте в порядке возрастания. sort гарантированно выполняется в постоянном объеме памяти и (максимум) логарифмическом объеме стека.

Текущая реализация использует сортировку кучей. Она выполняется в постоянном объеме памяти стека.

Спецификация функции сравнения: Пусть a — массив, а cmp — функция сравнения. Следующее должно выполняться для всех x, y, z в a :

  • cmp x y > 0 тогда и только тогда, когда cmp y x < 0
  • если cmp x y >= 0 и cmp y z >= 0, то cmp x z >= 0

Когда sort возвращается, a содержит те же элементы, что и прежде, но переупорядоченные таким образом, что для всех i и j, являющихся допустимыми индексами a :

  • cmp a.(i) a.(j) >= 0 тогда и только тогда, когда i >= j
val stable_sort : ('a -> 'a -> int) -> 'a array -> unit

То же, что и Array.sort, но алгоритм сортировки устойчив (т.е. элементы, которые равны при сравнении, сохраняются в их исходном порядке) и не гарантирует выполнения в постоянном объеме памяти.

Текущая реализация использует сортировку слиянием. Она использует временный массив длиной n/2, где n — длина массива. Обычно она быстрее текущей реализации Array.sort.

val fast_sort : ('a -> 'a -> int) -> 'a array -> unit

То же, что и Array.sort или Array.stable_sort, какой из них быстрее на типичном вводе.

Массивы и последовательности

val to_seq : 'a array -> 'a Seq.t

Итерация по массиву в порядке возрастания. Изменения массива во время итерации будут отражены в последовательности.

  • Since 4.07
val to_seqi : 'a array -> (int * 'a) Seq.t

Итерация по массиву в порядке возрастания, возвращающая индексы вместе с элементами. Изменения массива во время итерации будут отражены в последовательности.

  • Since 4.07
val of_seq : 'a Seq.t -> 'a array

Создание массива из генератора

  • Since 4.07

© 1995-2022 INRIA.
https://v2.ocaml.org/releases/4.14/htmlman/libref/Array.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API