列表中元素的位置(OCaml)

时间:2013-07-16 00:50:18

标签: list position ocaml element

在OCaml的元素列表中获取元素位置的最快方法是什么? 我知道如何在列表中获取元素的“第n”位置,但我想知道如果我已经知道该值,该如何获取该元素的位置。

2 个答案:

答案 0 :(得分:9)

我认为最快的方式是最常用的方式:

  1. 扫描列表
  2. 如果点击了所需的元素,则返回位置
  3. 如果从未点击过,那么这是最糟糕的情况,扫描整个列表。
  4. 时间复杂度为 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