gpt4 book ai didi

F# -> Seq to Map

转载 作者:行者123 更新时间:2023-12-04 22:51:01 26 4
gpt4 key购买 nike

我正在尝试加载我所有的 Categories从数据库中,然后将它们映射到 Map (字典?),但是当我使用以下代码时:

[<StructuralComparison>]
type Category = {
mutable Id: string;
Name: string;
SavePath: string;
Tags: ResizeArray<Tag> }

let categories = session.Query<Category>()
|> Seq.map(fun z -> (z,0))
|> Map.ofSeq

它只是抛出一个错误,说:

The struct, record or union type 'Category' has the 'StructuralComparison' attribute but the component type 'ResizeArray' does not satisfy the 'comparison' constraint



我完全不知道该怎么做,所以任何帮助表示赞赏!

最佳答案

这里的问题是通过添加 StructuralComparison类型的属性 Category您已要求 F# 在比较 Category 的实例时使用结构比较.简而言之,它将单独比较每个成员以查看它们是否相等,以确定 Category 的两个实例是否相同。是平等的。

这对 Category 的每个成员都施加了隐式约束。使自己具有可比性。型号ResizeArray<Tag>正在生成错误,因为它没有可比性。对于大多数集合类型都是如此。

为了摆脱这个错误,你需要制作 ResizeArray<T>输入可比较的或为 Map 选择不同的键. Don 有一篇很棒的博客文章,深入探讨了这个主题,并提供了许多不同的方法来实现这一点。非常值得一读

  • http://blogs.msdn.com/b/dsyme/archive/2009/11/08/equality-and-comparison-constraints-in-f-1-9-7.aspx
  • 关于F# -> Seq to Map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5543366/

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