2011-07-03 15 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

相關問題