在OCaml的元素列表中获取元素位置的最快方法是什么? 我知道如何在列表中获取元素的“第n”位置,但我想知道如果我已经知道该值,该如何获取该元素的位置。
答案 0 :(得分:9)
我认为最快的方式是最常用的方式:
时间复杂度为 O(N)
let index_of e l =
let rec index_rec i = function
| [] -> raise Not_found
| hd::tl -> if hd = e then i else index_rec (i+1) tl
in
index_rec 0 l
答案 1 :(得分:0)
let rec findi_rec base p l = match l with [] -> raise Not_found | h::_ when p h -> base | _::t -> findi_rec (base+1) p t;;
let findi p l = findi_rec 0 p l;;
如:
# findi (fun x -> x=4) [1;9;3;2;1;4;5;7];;
- : int = 5