Dictionary F#来自列表/序列的字典生成器

Dictionary F#来自列表/序列的字典生成器,dictionary,f#,Dictionary,F#,F#中是否有字典的构造函数(它将Seq/List作为输入,并输出字典)?我已经写了下面的代码来实现我想要的,但我只是好奇它是否已经实现了(所以我不需要自己实现它) 让DictionaryBuilder(keyFunc:'a->'b)(valueFunc:'a->'c)列表= 让dict=newdictionary() 主义者 |>Seq.iter(fun a->dict.Add(keyFunc a,valueFunc a)) dict//返回 我知道,在C#中,可以使用.ToDictionar

F#中是否有字典的构造函数(它将Seq/List作为输入,并输出字典)?我已经写了下面的代码来实现我想要的,但我只是好奇它是否已经实现了(所以我不需要自己实现它)

让DictionaryBuilder(keyFunc:'a->'b)(valueFunc:'a->'c)列表=
让dict=newdictionary()
主义者
|>Seq.iter(fun a->dict.Add(keyFunc a,valueFunc a))
dict//返回
我知道,在C#中,可以使用.ToDictionary(使用System.Linq)

//使用System.Collections.Generic;
//使用System.Linq;
列表示例=新列表{“a”、“b”、“c”};
字典输出=example.ToDictionary(x=>x+“键”,x=>x+“值”);
//输出:{“aKey”:“aValue”,“bKey”:“bValue”,“cKey”:“cValue”}

非常感谢。

dict函数的签名如下:

dict : seq<'Key * 'Value> -> IDictionary<'Key,'Value> 
编辑


正如QuickBrownFox在注释中所指出的,dict函数生成一个只读字典。

我建议您只使用LINQ:

open System.Linq
[1; 2; 3].ToDictionary(id, (*) 2)
如果希望使用函数而不是扩展方法,可以直接使用它,也可以在助手函数中使用它

module Seq =
    open System.Linq
    let toDictionary (f:'s -> 'k) (g:'s -> 'v) (xs:_ seq) = xs.ToDictionary(f, g)

请注意,
dict
生成只读词典(当您尝试添加或删除项时,它将引发异常)。您可以通过将该字典再次传递给字典构造函数来解决此问题:
。|>dict |>System.Collections.Generic.Dictionary
aList 
|> Seq.map (fun a -> keyFunc a, valueFunc a )
|> dict
open System.Linq
[1; 2; 3].ToDictionary(id, (*) 2)
module Seq =
    open System.Linq
    let toDictionary (f:'s -> 'k) (g:'s -> 'v) (xs:_ seq) = xs.ToDictionary(f, g)