F#将Map转换为Dict的有效方法(反之亦然)

时间:2016-02-16 00:48:48

标签: dictionary f#

我没有看到任何原生函数从Dict转换为Map,反之亦然。 (比如Map.ofDict或Dict.ofMap) (主要区别是Map是不可变的,而Dict是可变的)

我错过了什么吗?

感谢

1 个答案:

答案 0 :(得分:7)

从字典到地图没有方便的功能,但有一个内置的dict函数可以从一系列元组转换为IDictionary<'a,'b>,请参阅:https://msdn.microsoft.com/en-us/library/ee353774.aspx

我知道做字典映射转换的最简单方法是:

let dictToMap (dic : System.Collections.Generic.IDictionary<_,_>) = 
    dic 
    |> Seq.map (|KeyValue|)  
    |> Map.ofSeq

使用dict函数可以很容易地反过来:

let mapToDict map =
    map 
    |> Map.toSeq
    |> dict

请注意,上面的函数返回IDictionary,其实现既是FSharp.Core库的内部,也不是可变的。

如果你想获得一个标准的.NET可变字典,你可以使用接受IDictionaryMap实现IDictionary的构造函数,所以这一步非常简单。

let mapToMutDict map =
    map :> System.Collections.Generic.IDictionary<_,_>
    |> System.Collections.Generic.Dictionary