OCaml:过滤映射并将值放入列表中

时间:2016-05-29 17:19:52

标签: ocaml

我可以按键过滤我的map

module PairKeys =
struct
  type t = string * string
  let compare (x0,y0) (x1,y1) =
    match String.compare x0 x1 with
    | 0 -> String.compare y0 y1
    | c -> c
end

module StringMap = Map.Make(PairKeys);;
....

let put_key_values_into_a_list (key_searched : string) = 
    StringMap.filter (fun key -> key = key_searched)
(* should return a list of the values in the filtered map *)

之后,我想将值放入列表中。 我怎样才能在OCaml中做到这一点?

Map.Make文档: http://caml.inria.fr/pub/docs/manual-ocaml/libref/Map.Make.html

谢谢

2 个答案:

答案 0 :(得分:1)

您可以使用[row][column]检索地图的键/值对,然后进一步处理它们以提取值。例如:

bindings

我们使用let put_key_values_into_a_list key_searched map = MyMap.filter (fun key _ -> key = key_searched) map |> MyMap.bindings |> List.split |> snd 将对列表转换为一对列表(一个包含键,一个包含值),然后List.split以提取值列表。

另请注意snd接受一个带有两个参数的函数(第二个参数在此处被忽略)。

答案 1 :(得分:1)

我是这样做的。我在过滤后调用了折叠:

let put_key_values_into_a_list key_searched map =
    MyMap.fold (fun _ i acc -> i::acc) 
       (MyMap.filter (fun (x,_) _ -> x = key_searched) map) 
       []