gpt4 book ai didi

f# - F#中是否存在带键的记录类型

转载 作者:行者123 更新时间:2023-12-03 07:56:55 25 4
gpt4 key购买 nike

在 OPL(优化编程语言)中,我们有一个数据结构名称 tuple . OPL 元组对应于 F# 中的 Record。这是它的定义方式:

tuple Point {
int x;
int y;
};

就像在 F# 中一样,我们可以使用点符号访问字段
int x = p.x;

我们可以在 Set 中对元组进行分组:
{Point} points = {<1,2>, <2,3>};

不同之处在于,就像在数据库系统中一样,元组结构可以与键相关联。元组键允许使用一组唯一标识符访问以元组形式组织的数据。在下面的例子中,护士元组是用字符串类型的键名声明的。
tuple nurse {
key string name;
int seniority;
int qualification;
int payRate;
}
{ nurse } nurses = …;

key 的好处是我们可以用这种方式初始化一个数组
int NumberOfChild [n in nurses] = 0;

并仅使用键访问值:
NumberOfChild[<"Isabelle">]=20;

省略没有键的字段。这相当于:
NumberOfChild[<"Isabelle",3,1,16>]=20;

此外,使用 key 意味着不会有两个具有相同 key 的元组。就像数据库中的主键。

问题是 : 在 F# 中是否存在这样的类型?用 key 录音?

我的目标 : 我想定义一个具有许多属性的节点结构。并通过仅提供节点的键而不是整个记录来加载图形结构,因为我将从数据库加载图形。
type Node = {
nodeKey : int;
nodeName : string;
nodeAttribute1 : string;
nodeAttribute2 : string }

let Graph = [
(1, 2);
(1, 3);
(2, 4);
(3, 4) ]

图元组中的 int 代表 nodeKey .
我想使用图形进行操作,但仅使用 key 访问节点信息。

OPL Grammar

最佳答案

不,没有这样的语言级别的概念。可以这么说,所有记录字段都是平等的。

这并不妨碍您:

  • 基于一个或多个字段值合成记录的键,
  • 使用这样的 key 作为 Map 中的 key 这将保存您的记录或任何其他值。

  • 所以你可以有这样的事情:
    type Nurse = { name: string; seniority: int; qualification: int; payRate: int }

    let nurses = [ { name = "Isabelle"; seniority = 3; qualification = 1; payRate = 16 } ]

    let numberOfChildren =
    [ "Isabelle", 20 ]
    |> Map.ofSeq

    let nursesWithNumberOfChildren =
    [ for nurse in nurses do
    match numberOfChildren |> Map.tryFind nurse.name with
    | Some children -> yield nurse, children
    | None -> yield nurse, 0 ]

    使用类似的方法,您可以分离图形和节点数据 - 仅在图形中存储键并维护从键到完整节点记录的映射。

    关于f# - F#中是否存在带键的记录类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37489285/

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