Модуль StdLabels.Array
module Array: ArrayLabels
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
val create_float : int -> float array
create_float n возвращает новый массив с плавающей точкой длины n, с неинициализированными данными.
- Since 4.03
val make_float : int -> float array
val init : int -> f:(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 : dimx:int -> dimy: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 : dimx:int -> dimy:int -> 'a -> 'a array array
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
То же, что и ArrayLabels.append, но конкатенирует список массивов.
val sub : 'a array -> pos:int -> len: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 -> pos:int -> len:int -> 'a -> unit
fill a ~pos ~len x изменяет массив a на месте, сохраняя x в элементах с номерами pos по pos + len - 1.
-
Возбуждает
Invalid_argumentеслиposиlenне обозначают допустимый подмассивa.
val blit : src:'a array -> src_pos:int -> dst:'a array -> dst_pos:int -> len: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 : f:('a -> unit) -> 'a array -> unit
iter ~f a применяет функцию f к каждому элементу a последовательно. Это эквивалентно f a.(0); f a.(1); ...; f a.(length a - 1); ().
val iteri : f:(int -> 'a -> unit) -> 'a array -> unit
То же, что и ArrayLabels.iter, но функция применяется к индексу элемента в качестве первого аргумента, а к самому элементу — как второму.
val map : f:('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 : f:(int -> 'a -> 'b) -> 'a array -> 'b array
То же, что и ArrayLabels.map, но функция применяется к индексу элемента в качестве первого аргумента, а к самому элементу — как второму.
val fold_left : f:('a -> 'b -> 'a) -> init:'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 : f:('a -> 'b -> 'a * 'c) -> init:'a -> 'b array -> 'a * 'c array
fold_left_map — комбинация ArrayLabels.fold_left и ArrayLabels.map, которая передаёт аккумулятор через вызовы f.
- Since 4.13.0
val fold_right : f:('b -> 'a -> 'a) -> 'b array -> init:'a -> 'a
fold_right ~f a ~init вычисляет f a.(0) (f a.(1) ( ... (f a.(n-1) init) ...)), где n — длина массива a.
Итераторы над двумя массивами
val iter2 : f:('a -> 'b -> unit) -> 'a array -> 'b array -> unit
iter2 ~f a b применяет функцию f ко всем элементам массивов a и b.
- Since 4.05.0
-
Возбуждает
Invalid_argumentесли массивы имеют разную длину.
val map2 : f:('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)|].
- Since 4.05.0
-
Возбуждает
Invalid_argumentесли массивы имеют разную длину.
Сканирование массивов
val for_all : f:('a -> bool) -> 'a array -> bool
for_all ~f [|a1; ...; an|] проверяет, удовлетворяют ли все элементы массива предикату f. То есть, он возвращает (f a1) && (f a2) && ... && (f an).
- Since 4.03.0
val exists : f:('a -> bool) -> 'a array -> bool
exists ~f [|a1; ...; an|] проверяет, удовлетворяет ли хотя бы один элемент массива предикату f. То есть, он возвращает (f a1) || (f a2) || ... || (f an).
- Since 4.03.0
val for_all2 : f:('a -> 'b -> bool) -> 'a array -> 'b array -> bool
То же, что и ArrayLabels.for_all, но для предиката с двумя аргументами.
- Since 4.11.0
-
Raises
Invalid_argumentесли у двух массивов разная длина.
val exists2 : f:('a -> 'b -> bool) -> 'a array -> 'b array -> bool
То же, что и ArrayLabels.exists, но для предиката с двумя аргументами.
- Since 4.11.0
-
Raises
Invalid_argumentесли у двух массивов разная длина.
val mem : 'a -> set:'a array -> bool
mem a ~set истинно тогда и только тогда, когда a структурно равно элементу l (т. е. существует элемент x в l, такой что compare a x = 0).
- Since 4.03.0
val memq : 'a -> set:'a array -> bool
То же, что и ArrayLabels.mem, но использует физическое равенство вместо структурного равенства для сравнения элементов списка.
- Since 4.03.0
val find_opt : f:('a -> bool) -> 'a array -> 'a option
find_opt ~f a возвращает первый элемент массива a , удовлетворяющий предикату f, или None , если нет значения, удовлетворяющего f в массиве a.
- Since 4.13.0
val find_map : f:('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 : cmp:('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 : cmp:('a -> 'a -> int) -> 'a array -> unit
То же, что и ArrayLabels.sort, но алгоритм сортировки устойчив (т. е. элементы, сравниваемые как равные, сохраняют свой исходный порядок) и не гарантированно работает в постоянном объёме оперативной памяти.
Текущая реализация использует сортировку слиянием. Она использует временный массив длины n/2, где n — длина массива. Как правило, она быстрее текущей реализации ArrayLabels.sort.
val fast_sort : cmp:('a -> 'a -> int) -> 'a array -> unit
То же, что и ArrayLabels.sort или ArrayLabels.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/StdLabels.Array.html