F#映射到C#字典

我正在尝试将F#地图转换为C#字典,到目前为止我正在使用:

let toDictionary (map : Map) : Dictionary = let dict = new Dictionary() map |> Map.iter (fun kv -> dict.Add(k, v)) dict 

它只是感觉有点笨重,我对F#很新,所以有更好的方法吗?

1.如果您想要标准的Dictionary实现: 请参阅jbtule的答案

2.如果你想要一个不可变的快速IDictionary:来自当前F#核心库的dict函数允许从任何键值元组序列创建一个只读字典:

 myDict |> Map.toSeq |> dict 

返回值的类型为IDictionary ,因此可以从C#中使用。 感谢Daniel的回答让我想起了Map.toSeq。

3.如果您可以直接使用Map :Map <,>实现IDictionary,这应该可以方便地从C#中使用。 但是,映射的访问是O(log n),而基于散列的字典访问是常量顺序。

AC# Dictionary将在其构造函数中使用IDictionaryMap是一个IDictionary所以:

 let toDictionary (map : Map<_, _>) : Dictionary<_, _> = Dictionary(map) 
 let toDictionary = Map.toSeq >> dict