将F#映射转换为哈希表
我需要将F#map类转换为System.Collections.Hashtable,以供C#使用 这个问题与下列问题不同: 这个问题询问如何从哈希表返回值。我想构建一个F#映射,然后将其转换为System.Collections.Hashtable 我该怎么做 非常感谢 以下是我尝试过的内容(未编译): 编辑:谢谢你的回答。以下是我决定使用的:将F#映射转换为哈希表,f#,map,hashtable,F#,Map,Hashtable,我需要将F#map类转换为System.Collections.Hashtable,以供C#使用 这个问题与下列问题不同: 这个问题询问如何从哈希表返回值。我想构建一个F#映射,然后将其转换为System.Collections.Hashtable 我该怎么做 非常感谢 以下是我尝试过的内容(未编译): 编辑:谢谢你的回答。以下是我决定使用的: let my_map = Map [(1, "one"); (2, "two")] let myHash = Hashtable() my_map
let my_map = Map [(1, "one"); (2, "two")]
let myHash = Hashtable()
my_map |> Map.iter (fun k v -> myHash.Add(k, v))
这段代码可以编译
let my_map = Map( [(1, "one"); (2, "two")] )
let myHash = Hashtable()
my_map |> Map.iter (fun k v -> myHash.Add(k, v) )
原始版本没有编译,因为dict[(1,“一”);(2,“二”)]
的类型是IDictionary
,而不是Map
。和映射。*函数族需要在F#映射类型上操作 此代码可编译
let my_map = Map( [(1, "one"); (2, "two")] )
let myHash = Hashtable()
my_map |> Map.iter (fun k v -> myHash.Add(k, v) )
原始版本没有编译,因为
dict[(1,“一”);(2,“二”)]
的类型是IDictionary
,而不是Map
。和映射。*函数族需要在F#映射类型上操作 您可以使用活动模式KeyValuePair
my_map |> Seq.iter(fun (KeyValue (k,v)) -> myHash.Add(k, v))
您可以使用活动模式KeyValuePair
my_map |> Seq.iter(fun (KeyValue (k,v)) -> myHash.Add(k, v))
如果我写这篇文章,我可能更喜欢
for
循环,而不是高阶函数iter
。无论如何,您都在编写命令式代码(处理命令式对象),我不认为使用iter
会使它“更具功能”。F#还提供了对命令式编程的支持,因此我们可以在这种情况下使用这些命令式功能:
let myHash = Hashtable()
for (KeyValue(k, v)) in myMap do
myHash.Add(k, v)
我通常只在不需要编写显式lambda函数作为第二个参数时才喜欢iter
函数。例如,如果以下各项可行:
myMap |> Seq.iter myHash.Add // This doesn't work, so I prefer 'for' instead
如果你对C代码有一定的控制,你也可以考虑在C语言中只使用<代码> IDICORION<代码>而不是<代码>哈希表< /代码>。在这种情况下,您可以很容易地通过F#
Map作为结果,因为Map实现了IDictionary
接口(正好允许从C#平滑使用)。如果我写这篇文章,我可能更喜欢for
循环,而不是高阶函数iter
。无论如何,您都在编写命令式代码(处理命令式对象),我不认为使用iter
会使它“更具功能”。F#还提供了对命令式编程的支持,因此我们可以在这种情况下使用这些命令式功能:
let myHash = Hashtable()
for (KeyValue(k, v)) in myMap do
myHash.Add(k, v)
我通常只在不需要编写显式lambda函数作为第二个参数时才喜欢iter
函数。例如,如果以下各项可行:
myMap |> Seq.iter myHash.Add // This doesn't work, so I prefer 'for' instead
如果你对C代码有一定的控制,你也可以考虑在C语言中只使用<代码> IDICORION<代码>而不是<代码>哈希表< /代码>。在这种情况下,您可以很容易地将F#
Map
作为结果传递,因为Map实现了IDictionary
接口(正好允许从C#顺利使用)