c# - 如何让 ToDictionary 在 F# 中工作?

标签 c# linq f#

我有这个 C# 示例,它将根据整数数组创建奇数和偶数字典:

int[] values = new int[]
{
    1,
    2,
    3,
    5,
    7
};

Dictionary<int, string> dictionary = 
           values.ToDictionary(key => key, val => (val % 2 == 1) ? "Odd" : "Even");

// Display all keys and values.
foreach (KeyValuePair<int, string> pair in dictionary)
{
    Console.WriteLine(pair);
}

输出是:

[1, Odd]
[2, Even]
[3, Odd]
[5, Odd]
[7, Odd]

我想在 F# 中使用 ToDictionary 进行类似的操作,到目前为止:

let values = [| 1; 2; 3; 5; 7 |]

let dictionary = values.ToDictionary( ??? )

// Display all keys and values.
for d in dictionary do
    printfn "%d %s" d.Key d.Value

但是我将如何编写 ToDictionary 中的逻辑?

最佳答案

您当然可以使用 F# 中的 ToDictionary(以及所有其他 LINQ 方法),但有时使用 F# 库中的函数更为惯用。

如果我想创建这个字典,我会使用这样的东西:

let values = [| 1; 2; 3; 5; 7 |]
let dictionary = dict [ for v in values -> v, if v % 2 = 1 then "Odd" else "Even" ]

这里的 dict 是一个 F# 库函数,它从包含键和值的元组创建字典(元组是使用 , 创建的,所以我们使用 v 作为键,字符串作为值)。

关于c# - 如何让 ToDictionary 在 F# 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31060551/

相关文章:

c# - 在不实现的情况下使用 Linq Indexof StartIndex

c# - 从其他 Activity 的构造函数开始 Activity ?

c# - 在图片框上创建平滑线(winforms,c#)

c# - 用 Linq 迭代

c# - 使用 LINQPad 查询包含嵌套元素的 XML 文件?

xml - F# XML 类型提供程序更改名称

F# Powerpack 的元数据无法将 FSharp.Core 识别为 F# 库

f# - 如何为 Saturn 应用构建集成测试

c# - 避免在已部署的 c# asp 网站中窃取代码

c# - "lock(obj) {/* empty */}"对线程可见性的影响