Module CCArrayLabels
Array utils
type 'a gen= unit -> 'a optiontype 'a equal= 'a -> 'a -> booltype 'a ord= 'a -> 'a -> inttype 'a random_gen= Stdlib.Random.State.t -> 'atype 'a printer= Stdlib.Format.formatter -> 'a -> unit
Arrays
include module type of CCShimsArrayLabels_
Documentation for the standard ArrayLabels module
include module type of Stdlib.ArrayLabels with module CCArrayLabels.Floatarray = Stdlib.Array.Floatarray
val length : 'a array -> intval get : 'a array -> int -> 'aval set : 'a array -> int -> 'a -> unitval make : int -> 'a -> 'a arrayval create : int -> 'a -> 'a array
val init : int -> f:(int -> 'a) -> 'a arrayval make_matrix : dimx:int -> dimy:int -> 'a -> 'a array arrayval create_matrix : dimx:int -> dimy:int -> 'a -> 'a array arrayval append : 'a array -> 'a array -> 'a arrayval concat : 'a array list -> 'a arrayval sub : 'a array -> pos:int -> len:int -> 'a arrayval copy : 'a array -> 'a arrayval fill : 'a array -> pos:int -> len:int -> 'a -> unitval blit : src:'a array -> src_pos:int -> dst:'a array -> dst_pos:int -> len:int -> unitval to_list : 'a array -> 'a listval of_list : 'a list -> 'a arrayval iter : f:('a -> unit) -> 'a array -> unitval map : f:('a -> 'b) -> 'a array -> 'b arrayval iteri : f:(int -> 'a -> unit) -> 'a array -> unitval mapi : f:(int -> 'a -> 'b) -> 'a array -> 'b arrayval fold_left : f:('a -> 'b -> 'a) -> init:'a -> 'b array -> 'aval fold_right : f:('b -> 'a -> 'a) -> 'b array -> init:'a -> 'aval iter2 : f:('a -> 'b -> unit) -> 'a array -> 'b array -> unitval map2 : f:('a -> 'b -> 'c) -> 'a array -> 'b array -> 'c arrayval exists : f:('a -> bool) -> 'a array -> boolval for_all : f:('a -> bool) -> 'a array -> boolval mem : 'a -> set:'a array -> boolval memq : 'a -> set:'a array -> bool
val make_float : int -> float arrayval sort : cmp:('a -> 'a -> int) -> 'a array -> unitval stable_sort : cmp:('a -> 'a -> int) -> 'a array -> unitval fast_sort : cmp:('a -> 'a -> int) -> 'a array -> unitval to_seq : 'a array -> 'a Stdlib.Seq.tval to_seqi : 'a array -> (int * 'a) Stdlib.Seq.tval of_seq : 'a Stdlib.Seq.t -> 'a array
module Floatarray : sig ... endval empty : 'a temptyis the empty array, physically equal to||.
val equal : 'a equal -> 'a t equalequal eq a1 a2istrueif the lengths ofa1anda2are the same and if their corresponding elements test equal, usingeq.
val compare : 'a ord -> 'a t ordcompare cmp a1 a2compares arraysa1anda2using the function comparisoncmp.
val swap : 'a t -> int -> int -> unitswap a i jswaps elements at indicesiandj.- since
- 1.4
val get_safe : 'a t -> int -> 'a optionget_safe a ireturnsSome a.(i)ifiis a valid index.- since
- 0.18
val fold : f:('a -> 'b -> 'a) -> init:'a -> 'b t -> 'afold ~f ~init acomputesf (… (f (f init a.(0)) a.(1)) …) a.(n-1), wherenis the length of the arraya. Same asArrayLabels.fold_left
val foldi : f:('a -> int -> 'b -> 'a) -> init:'a -> 'b t -> 'afoldi ~f ~init ais just likefold, but it also passes in the index of each element as the second argument to the folded functionf.
val fold_while : f:('a -> 'b -> 'a * [ `Stop | `Continue ]) -> init:'a -> 'b t -> 'afold_while ~f ~init afolds left on arrayauntil a stop condition via('a, `Stop)is indicated by the accumulator.- since
- 0.8
val fold_map : f:('acc -> 'a -> 'acc * 'b) -> init:'acc -> 'a t -> 'acc * 'b tfold_map ~f ~init ais afold_left-like function, but it also maps the array to another array.- since
- 1.2, but only
- since
- 2.1 with labels
val scan_left : f:('acc -> 'a -> 'acc) -> init:'acc -> 'a t -> 'acc tscan_left ~f ~init areturns the array[|init; f init x0; f (f init a.(0)) a.(1); …|].- since
- 1.2, but only
- since
- 2.1 with labels
val reverse_in_place : 'a t -> unitreverse_in_place areverses the arrayain place.
val sorted : f:('a -> 'a -> int) -> 'a t -> 'a arraysorted ~f amakes a copy ofaand sorts it withf.- since
- 1.0
val sort_indices : f:('a -> 'a -> int) -> 'a t -> int arraysort_indices ~f areturns a new arrayb, with the same length asa, such thatb.(i)is the index at which thei-th element ofsorted f aappears ina.ais not modified.In other words,
map (fun i -> a.(i)) (sort_indices f a) = sorted f a.sort_indicesyields the inverse permutation ofsort_ranking.- since
- 1.0
val sort_ranking : f:('a -> 'a -> int) -> 'a t -> int arraysort_ranking ~f areturns a new arrayb, with the same length asa, such thatb.(i)is the index at which thei-th element ofaappears insorted f a.ais not modified.In other words,
map (fun i -> (sorted f a).(i)) (sort_ranking f a) = a.sort_rankingyields the inverse permutation ofsort_indices.In the absence of duplicate elements in
a, we also havelookup_exn a.(i) (sorted a) = (sorted_ranking a).(i).- since
- 1.0
val mem : ?eq:('a -> 'a -> bool) -> 'a -> 'a t -> boolmem ~eq x areturn true if x is present ina. Linear time.- since
- 3.0
val find_map : f:('a -> 'b option) -> 'a t -> 'b optionfind_map ~f areturnsSome yif there is an elementxsuch thatf x = Some y. Otherwise returnsNone.- since
- 1.3, but only
- since
- 2.1 with labels
val find_map_i : f:(int -> 'a -> 'b option) -> 'a t -> 'b optionfind_map_i ~f ais likefind_map, but the index of the element is also passed to the predicate functionf.- since
- 1.3, but only
- since
- 2.1 with labels
val find_idx : f:('a -> bool) -> 'a t -> (int * 'a) optionfind_idx ~f areturnsSome (i,x)wherexis thei-th element ofa, andf xholds. Otherwise returnsNone.- since
- 0.3.4
val lookup : cmp:'a ord -> key:'a -> 'a t -> int optionlookup ~cmp ~key alookups the index of some keykeyin a sorted arraya. Undefined behavior if the arrayais not sorted wrtcmp. Complexity:O(log (n))(dichotomic search).- returns
Noneif the keykeyis not present, orSome i(ithe index of the key) otherwise.
val lookup_exn : cmp:'a ord -> key:'a -> 'a t -> intlookup_exn ~cmp ~key ais likelookup, but- raises Not_found
if the key
keyis not present.
val bsearch : cmp:('a -> 'a -> int) -> key:'a -> 'a t -> [ `All_lower | `All_bigger | `Just_after of int | `Empty | `At of int ]bsearch ~cmp ~key afinds the index of the objectkeyin the arraya, providedais sorted usingcmp. If the array is not sorted, the result is not specified (may raise Invalid_argument).Complexity:
O(log n)where n is the length of the arraya(dichotomic search).- returns
`At iifcmp a.(i) key = 0(for some i).`All_lowerif all elements ofaare lower thankey.`All_biggerif all elements ofaare bigger thankey.`Just_after iifa.(i) < key < a.(i+1).`Emptyif the arrayais empty.
- raises Invalid_argument
if the array is found to be unsorted w.r.t
cmp.
- since
- 0.13
val for_all2 : f:('a -> 'b -> bool) -> 'a t -> 'b t -> boolfor_all2 ~f [|a1; …; an|] [|b1; …; bn|]istrueif each pair of elementsai bisatisfies the predicatef. That is, it returns(f a1 b1) && (f a2 b2) && … && (f an bn).- raises Invalid_argument
if arrays have distinct lengths. Allow different types.
- since
- 0.20
val exists2 : f:('a -> 'b -> bool) -> 'a t -> 'b t -> boolexists2 ~f [|a1; …; an|] [|b1; …; bn|]istrueif any pair of elementsai bisatisfies the predicatef. That is, it returns(f a1 b1) || (f a2 b2) || … || (f an bn).- raises Invalid_argument
if arrays have distinct lengths. Allow different types.
- since
- 0.20
val fold2 : f:('acc -> 'a -> 'b -> 'acc) -> init:'acc -> 'a t -> 'b t -> 'accfold2 ~f ~init a bfold on two arraysaandbstepwise. It computesf (… (f init a1 b1) …) an bn.- raises Invalid_argument
if
aandbhave distinct lengths.
- since
- 0.20
val iter2 : f:('a -> 'b -> unit) -> 'a t -> 'b t -> unititer2 ~f a biterates on the two arraysaandbstepwise. It is equivalent tof a0 b0; …; f a.(length a - 1) b.(length b - 1); ().- raises Invalid_argument
if
aandbhave distinct lengths.
- since
- 0.20
val shuffle : 'a t -> unitshuffle arandomly shuffles the arraya, in place.
val shuffle_with : Stdlib.Random.State.t -> 'a t -> unitshuffle_with rs arandomly shuffles the arraya(likeshuffle) but a specialized random statersis used to control the random numbers being produced during shuffling (for reproducibility).
val random_choose : 'a t -> 'a random_genrandom_choose a rsrandomly chooses an element ofa.- raises Not_found
if the array/slice is empty.
val to_string : ?sep:string -> ('a -> string) -> 'a array -> stringto_string ~sep item_to_string aprintato a string usingsepas a separator between elements ofa.- since
- 2.7
val to_iter : 'a t -> 'a iterto_iter areturns aniterof the elements of an arraya. The input arrayais shared with the sequence and modification of it will result in modification of the iterator.- since
- 2.8
val to_seq : 'a t -> 'a Stdlib.Seq.tto_seq areturns aSeq.tof the elements of an arraya. The input arrayais shared with the sequence and modification of it will result in modification of the sequence. Renamed fromto_std_seqsince 3.0.- since
- 3.0
IO
val pp : ?pp_start:unit printer -> ?pp_stop:unit printer -> ?pp_sep:unit printer -> 'a printer -> 'a t printerpp ~pp_start ~pp_stop ~pp_sep pp_item ppf aformats the arrayaonppf. Each element is formatted withpp_item,pp_startis called at the beginning,pp_stopis called at the end,pp_sepis called between each elements. By defaultspp_startandpp_stopdoes nothing andpp_sepdefaults to (fun out -> Format.fprintf out ",@ ").
val pp_i : ?pp_start:unit printer -> ?pp_stop:unit printer -> ?pp_sep:unit printer -> (int -> 'a printer) -> 'a t printerpp_i ~pp_start ~pp_stop ~pp_sep pp_item ppf aprints the arrayaonppf. The printing functionpp_itemis giving both index and element.pp_startis called at the beginning,pp_stopis called at the end,pp_sepis called between each elements. By defaultspp_startandpp_stopdoes nothing andpp_sepdefaults to (fun out -> Format.fprintf out ",@ ").
val map2 : f:('a -> 'b -> 'c) -> 'a t -> 'b t -> 'c tmap2 ~f a bapplies functionfto all elements ofaandb, and builds an array with the results returned byf:[| f a.(0) b.(0); …; f a.(length a - 1) b.(length b - 1)|].- raises Invalid_argument
if
aandbhave distinct lengths.
- since
- 0.20
val filter : f:('a -> bool) -> 'a t -> 'a tfilter ~f afilters elements out of the arraya. Only the elements satisfying the given predicatefwill be kept.
val filter_map : f:('a -> 'b option) -> 'a t -> 'b tfilter_map ~f [|a1; …; an|]calls(f a1) … (f an)and returns an arraybconsisting of all elementsbisuch asf ai = Some bi. WhenfreturnsNone, the corresponding element ofais discarded.
val monoid_product : f:('a -> 'b -> 'c) -> 'a t -> 'b t -> 'c tmonoid_product ~f a bpasses all combinaisons of tuples from the two arraysaandbto the functionf.- since
- 2.8
val flat_map : f:('a -> 'b t) -> 'a t -> 'b arrayflat_map ~f atransforms each element ofainto an array, then flattens.
val except_idx : 'a t -> int -> 'a listexcept_idx a iremoves the element ofaat given indexi, and returns the list of the other elements.
val random : 'a random_gen -> 'a t random_genval random_non_empty : 'a random_gen -> 'a t random_genval random_len : int -> 'a random_gen -> 'a t random_gen
Generic Functions
module type MONO_ARRAY = sig ... endval sort_generic : (module MONO_ARRAY with type elt = 'elt and type t = 'arr) -> cmp:('elt -> 'elt -> int) -> 'arr -> unitsort_generic (module M) ~cmp asorts the arraya, without allocating (eats stack space though). Performance might be lower thanArray.sort.- since
- 0.14
Infix Operators
It is convenient to open CCArray.Infix to access the infix operators without cluttering the scope too much.
- since
- 2.7
module Infix : sig ... endinclude module type of Infix
val (--) : int -> int -> int tx -- ycreates an array containing integers in the rangex .. y. Bounds included.
val (--^) : int -> int -> int tx --^ ycreates an array containing integers in the rangex .. y. Right bound excluded.- since
- 0.17
Let operators on OCaml >= 4.08.0, nothing otherwise
- since
- 2.8