我想轉換的F#映射到一個C#字典,到目前爲止我使用:F#映射到C#字典
let toDictionary (map : Map<_, _>) : Dictionary<_, _> =
let dict = new Dictionary<_, _>()
map |> Map.iter (fun k v -> dict.Add(k, v))
dict
我就覺得有點麻煩,我是相當新的F#這樣它有更好的方法嗎?
我想轉換的F#映射到一個C#字典,到目前爲止我使用:F#映射到C#字典
let toDictionary (map : Map<_, _>) : Dictionary<_, _> =
let dict = new Dictionary<_, _>()
map |> Map.iter (fun k v -> dict.Add(k, v))
dict
我就覺得有點麻煩,我是相當新的F#這樣它有更好的方法嗎?
1.如果你想在標準字典實現:See the answer of jbtule
2.如果你想要一個不可改變的,快速的IDictionary:從目前的F#核心庫the dict function允許創建一個只讀的字典從鍵值元組的任何序列:
myDict |> Map.toSeq |> dict
返回值的類型爲IDictionary
並且因此應該是從C#可用。 感謝Daniel's answer讓我想起Map.toSeq。
3.如果你很好用地圖直接:地圖<,>實現IDictionary的,這應該是方便的從C#中使用。但是,映射的訪問是O(log n),而基於散列的字典訪問是不變的順序。
C#Dictionary
將在其構造函數中使用IDictionary
。 Map
是IDictionary
這樣:
let toDictionary (map : Map<_, _>) : Dictionary<_, _> = Dictionary(map)
總結別人的答案FTW。 – Daniel 2014-11-24 17:12:46
@Daniel我不確定這是不是諷刺。重新鼓勵;此外,我首先使用了字典,後來首次提出直接使用Map類型,所以它甚至不是「僅」的摘要。無論哪種方式,我的意思是不敬。我立即提出了jbtule的回答,如果你在不變性上添加註釋或警告,我也會讚揚你的。 (我猶豫了,因爲人們可能期望結果是可變的,然後在運行時得到一個異常) – Vandroiy 2014-11-24 18:25:26
實際上'dict'不給你ac#字典,下面返回false'(Map.empty |> Map。 toSeq |>字典):?詞典'所以問題是你爲什麼要使用它來直接使用*來回答這個問題。 –
jbtule
2014-11-24 18:41:29