Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将F#映射转换为哈希表_F#_Map_Hashtable - Fatal编程技术网

将F#映射转换为哈希表

将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

我需要将F#map类转换为System.Collections.Hashtable,以供C#使用

这个问题与下列问题不同:

这个问题询问如何从哈希表返回值。我想构建一个F#映射,然后将其转换为System.Collections.Hashtable

我该怎么做

非常感谢

以下是我尝试过的内容(未编译):

编辑:谢谢你的回答。以下是我决定使用的:

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#顺利使用)