如何让ToDictionary在F#中工作

本文关键字:工作 ToDictionary | 更新日期: 2023-09-27 18:00:00

我有一个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中编写逻辑呢?

如何让ToDictionary在F#中工作

您当然可以使用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作为键,使用字符串作为值)。

像这样:

ToDictionary(id, fun v -> if v % 2 = 1 then "Odd" else "Even")