2011-07-03 16 views
3

我不是很熟悉Ocaml中的地图模块。简单的方法来找到绑定的地图中的键,Ocaml

我从int一个简单的地图m: string Map.Make(Int).tstring,我知道每一个绑定(:string)是独一无二的。我想写一个函数find_from_string_to_int: string -> string Map.Make(Int).t -> int,任何人都可以帮忙吗?非常感谢你!

回答

3

如果是经常进行的,最简单的方法是一种通过折叠地图SMap.fold的所有(键,值)绑定:

# module SMap = Map.Make(String);; 
# let reverse v t = 
    SMap.fold (fun k v' acc -> if v = v' then Some k else acc) t None;; 
val reverse : 'a -> 'a SMap.t -> SMap.key option = <fun> 

如果这是一个常见的操作,你在找什么for是双向映射(可以在“方向”上查询的映射)。最简单的方法是携带一对地图:int IMap.t * string SMap.t(两个方向的访问都是对数,而reverse上面的地图的大小是线性的)。你也可以实现一个专用的数据结构,但这可能不值得增加复杂性。

PS:reverse可以优化以在发现值的时候尽早退出迭代,但是如果它是非常规操作,则无论如何这并不重要。

+0

谢谢,那个作品 – SoftTimur

相关问题