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
将在其构造函数中使用IDictionary
。 Map
是一个IDictionary
所以:
let toDictionary (map : Map<_, _>) : Dictionary<_, _> = Dictionary(map)
let toDictionary = Map.toSeq >> dict