Module CCArrayLabels
Array utils
type 'a sequence= ('a -> unit) -> unittype 'a klist= unit -> [ `Nil | `Cons of 'a * 'a klist ]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 Stdlib.ArrayLabels
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 : 'a t -> int -> 'aget a nreturns the element numbernof arraya. The first element has number 0. The last element has numberlength a - 1. You can also writea.(n)instead ofget a n.Raise
Invalid_argument "index out of bounds"ifnis outside the range 0 to(length a - 1).
val get_safe : 'a t -> int -> 'a optionget_safe a ireturnsSome a.(i)ifiis a valid index.- since
- 0.18
val set : 'a t -> int -> 'a -> unitset a n xmodifies arrayain place, replacing element numbernwithx. You can also writea.(n) <- xinstead ofset a n x.Raise
Invalid_argument "index out of bounds"ifnis outside the range 0 tolength a - 1.
val length : _ t -> intlength areturns the length (number of elements) of the given arraya.
val fold : f:('a -> 'b -> 'a) -> init:'a -> 'b t -> 'afold ~f ~init acomputes~f (... (~f (~f ~init a.(0)) a.(1)) ...) a.(n-1), wherenis the length of the arraya.
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 function~f.
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 iter : f:('a -> unit) -> 'a t -> unititer ~f aapplies function~fin turn to all elements ofa. It is equivalent to~f a.(0); ~f a.(1); ...; ~f a.(length a - 1); ().
val iteri : f:(int -> 'a -> unit) -> 'a t -> unititeri ~f ais likeiter, but the function~fis applied with the index of the element as first argument, and the element itself as second argument.
val blit : 'a t -> int -> 'a t -> int -> int -> unitblit a1 o1 a2 o2 lencopieslenelements from arraya1, starting at element numbero1, to arraya2, starting at element numbero2. It works correctly even ifa1anda2are the same array, and the source and destination chunks overlap.Raise
Invalid_argument "CCArray.blit"ifo1andlendo not designate a valid subarray ofa1, or ifo2andlendo not designate a valid subarray ofa2.
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 with~f.- 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 find_map : f:('a -> 'b option) -> 'a t -> 'b optionfind_map ~f areturnsSome yif there is an elementxsuch that~f x = Some y. Otherwise returnsNone.- since
- 1.3, but only
- since
- 2.1 with labels
val find : f:('a -> 'b option) -> 'a t -> 'b optionfind ~f ais an alias tofind_map.- deprecated
since 1.3, use
find_mapinstead. The version with labels is
- deprecated
since 2.1, use
find_mapinstead.
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 function~f.- since
- 1.3, but only
- since
- 2.1 with labels
val findi : f:(int -> 'a -> 'b option) -> 'a t -> 'b optionfindi ~f ais an alias tofind_map_i.- since
- 0.3.4
- deprecated
since 1.3, use
find_mapinstead. The version with labels is
- deprecated
since 2.1, use
find_mapinstead.
val find_idx : f:('a -> bool) -> 'a t -> (int * 'a) optionfind_idx ~f areturnsSome (i,x)wherexis thei-th element ofa, and~f 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 key~keyin a sorted arraya. Undefined behavior if the arrayais not sorted wrt~cmp. Complexity:O(log (n))(dichotomic search).- returns
Noneif the key~keyis 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 object~keyin the arraya, providedais sorted using~cmp. 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_all : f:('a -> bool) -> 'a t -> boolfor_all ~f [|a1; ...; an|]istrueif all elements of the array satisfy the predicate~f. That is, it returns(~f a1) && (~f a2) && ... && (~f an).
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 predicate~f. 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 exists : f:('a -> bool) -> 'a t -> boolexists ~f [|a1; ...; an|]istrueif at least one element of the array satisfies the predicate~f. That is, it returns(~f a1) || (~f a2) || ... || (~f an).
val exists2 : f:('a -> 'b -> bool) -> 'a t -> 'b t -> boolexists2 ~f [|a1; ...; an|] [|b1; ...; bn|]istrueif any pair of elementsai bisatisfies the predicate~f. 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 computes~f (... (~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 to~f 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.
IO
val pp : ?sep:string -> 'a printer -> 'a t printerpp ~sep pp_item ppf aformats the arrayaonppf. Each element is formatted withpp_itemand elements are separated bysep(defaults to ", ").
val pp_i : ?sep:string -> (int -> 'a printer) -> 'a t printerpp_i ~sep pp_item ppf aprints the arrayaonppf. The printing functionpp_itemis giving both index and element. Elements are separated bysep(defaults to ", ").
val map : f:('a -> 'b) -> 'a t -> 'b tmap ~f aapplies functionfto all elements ofa, and builds an array with the results returned by~f:[| ~f a.(0); ~f a.(1); ...; ~f a.(length a - 1) |].
val map2 : f:('a -> 'b -> 'c) -> 'a t -> 'b t -> 'c tmap2 ~f a bapplies function~fto all elements ofaandb, and builds an array with the results returned by~f:[| ~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 predicate~fwill 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 as~f ai = Some bi. When~freturnsNone, the corresponding element ofais discarded.
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 (--) : 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
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