gpt4 book ai didi

f# - 将字典键序列转换为集合

转载 作者:行者123 更新时间:2023-12-02 01:20:26 25 4
gpt4 key购买 nike

以下代码列出了在字典序列中找到的键集(每个字典基本上是数据库中的一行)。 (我想将键转换为一组,以便可以比较 2 个数据库表)

for seqitem in tblseq do
let keyset = seqitem.Keys |> Set.ofSeq // works correctly
printfn ">>> List: %A; Item Type: %A" keyset

我不想打印键集,而是想从函数返回它,但在类型推断方面遇到问题。尝试了以下方法,但不起作用;

我想要做的是将这些值作为列表数组返回(而不是打印它们)

let get_keyset tblseq = 
tblseq |> Seq.iter (fun x ->
x.Keys |> Set.ofSeq
)

我在这里缺少什么?

最佳答案

按照 ildjarn 的建议使用 Seq.map 是一种选择(您可能需要将 Array.ofSeq 添加到末尾以获取集合数组,正如您在问题中所说的那样)。

另一种方法是使用数组理解:

let get_keyset (tblseq:seq<System.Collections.Generic.Dictionary<_, _>>) = 
[| for x in tblseq -> x.Keys |> Set.ofSeq |]

符号[| .. |] 表示您要创建一个元素数组,-> 后面的表达式指定应生成的元素。该语法本质上只是一种更好的编写 Seq.map 的方法(尽管它支持更多功能)。

您还可以使用此语法来创建集(而不是调用Set.ofSeq)。在这种情况下,它没有多大意义,因为 Set.ofSeq 更快、更排序,但有时它是非常简洁的选项。它允许您避免类型注释,因为您可以使用 KeyValue 模式获取字典的键:

let get_keyset tblseq = 
[| for x in tblseq ->
set [ for (KeyValue(k, v)) in x -> k ] |]

关于f# - 将字典键序列转换为集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5615423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com