F# 入门(十三):Record(记录)

机器学习笔记 - 神经辐射场(NeRF)的简要概述 神经辐射场十分重要。在表示和渲染 3D 场景领域,神经辐射场 (NeRF) 在准确性方面取得了巨大突破。给定底层场景的多个图像,NeRF 可以从任意视点重建该场景的高分辨率、2D 渲染图。与局部光场融合 (LLFF) 和场景表示网络 (SRN) 等现有技术相比,NeRF 更能够捕获场景外观和几何形状的复杂组成部分(例如,依赖于视图的反射和复杂的材料)。NeRF的研究目的是合成同一场景不同视角下的图像。 阅读详情

Record在F#中是一种很重要的用来存贮数据的结构.它与元组和F# 中的枚举(DiscriminatedUnions)差不多,但是又有比他们更方便的地方,如:我们可以很轻松的访问Record中的每个元素的值,而不需要如元组那样做更多的操作才可取得。

下面我们看看Record的定义及与之相关的操作

Record的定义

我们使用type 关键字来定义Record,如我们定义一个名为myRecord的Record:

type myRecord = { Name : string ; Age : int }

在定义这个Record 之后,可以将myRecord当作一个模板,然后照此模板实例化自己的Record.如:

let record1 = { Name = "H";Age = 20 }

let record2 = { Name = "J";Age = 21 }

let record3 = { Name = "K";Age = 24 }

这三个Record均是由模板myRecord实例化而来的,其Interactive运行结果如下:

val record1 : myRecord = {Name ="H"; Age = 20;}

val record2 : myRecord = {Name ="J";  Age = 21;}

val record3 : myRecord = {Name ="K";  Age = 24;}

Record的相关操作——获取元素值

获取Record中元素的值很方便,由于每个元素都如同属性一样,我们可以通过使用Record名字加上.再加元素名即可获取其值,如:record1.Name就可以得到值“H”。

 

Record的相关操作——复制

有时候我们需要复制一个已知的Record 实例,然后在源Record基础上做小小的改动即可,其实现方法如下:

let copyRecord1 = { record1 with Name ="X" }

这里我们复制了record1,然后仅改动Name的值,其Interactive运行结果如下:

val copyRecord1 : myRecord = {Name= "X";  Age = 20;}

 

Record的相关操作——为Record添加属性或方法

Record和F# 的枚举一样,我们可以为之添加属性和方法,其方法如下:

type advanceRecord =

        { Name :string; Age : int }

       member this.Property =  "Hi"

       member this.PrintfInfo() = printfn "%s is%d years old" this.Namethis.Age

这里我们定义了一个名为Property的属性,以及一个名为PrintfInfo的方法, 其Interactive 的运行结果为:

type advanceRecord1 =

 {Name: string;

  Age: int;}

 with

   member PrintfInfo : unit -> unit

   member Property : string

 end

使用定义了属性与方法的Record与没有方法与属性的Record没有什么区别。其使用方法和获取元素值的方法一样,如:

let advrcd = { Name = "Z";Age = 24}

advrcd.PrintfInfo()

其运行结果:

Z is 24 years old

Record的相关操作——模式匹配

Record可以做为模式匹配的一部分,这也是Record相比传统数据类型的一项优势,在interactive 中运行下面代码:

type myRecord = { Name : string ; Age : int }

let record1 = { Name = "H";Age = 20 }

let record2 = { Name = "J";Age = 21 }

let record3 = { Name = "K";Age = 24 }

let recordList = [ record1; record2; record3 ]

let result =

   recordList

        |> List.filter

          ( function

           | {Age = 20} -> true

           | _ -> false )

其运行结果为:

val it : myRecord list = [{Name ="H";

                                       Age = 20;}]

Record相对于传统面向对象数据结果的优势

  • Record中的元素默认情况下是不可变的,相比类而言更安全
  • Record不能被继承,进一步提高了其安全性
  • Record可以被用来做模式匹配
  • Record可以进行比较,可以使用等号
华为OD机试 - TLV格式(Python/JS/C/C++ 2025 C卷 100分) 两端通过TLV格式的报文来通信,现在收到对端的一个TLV格式的消息包,要求生成匹配后的(tag,length,valueOffset)列表。和需要匹配的n个tag对应的n行匹配结果,每一行由长度和偏移量组成。第二行:需要匹配的tag数量n(0 < n < 1000)后面N行:需要匹配n个tag值(十进制表示),递增排列。标签10(0A)存在,长度3,valueOffset=2。标签15(0F)长度4,valueOffset=2。标签14(0E)长度2,valueOffset=8。 阅读详情

相关推荐

WIFI中CSI的读取

学习目标: 目前正在做基于WIFI的无设备定位,准备使用信道状态信息(CSI),学习一下。 目前采集数据环境已经搭建好,准备研究信号的预处理。 学习内容: 1、 信号的读取——read_bf_file函数的研究 2、 3、 4、 1. read_bf_file详解: %READ_BF_FILE Reads in a file of beamforming feedback logs. % This version uses the *C* version of read_bfee, ...

sz3076799的博客 8892

新特性Record最全用法总结---动力节点总结

Java14 中预览的新特性叫做 Record,在 Java 中,Record 是一种特殊类型的 Java 类。可用来创建不可变类,例如这个类中的属性值,一经赋值后不可再改变了。每个字段的 set,get 方法公共的构造方法重写 hashCode, toString(), equals()方法带有全部参数的构造方法public 访问器:属性的访问是通过公共的方法在编译Record过程中,会生成toString(),hashCode(),equals()等方法。

桂林电子科技大学 -芳 3806

ContextCapture导入点云进行重建

ContextCapture导入点云进行重建

天桥飞熊的博客 1万+

数据类型之记录(record)

在Object Pascal中用户自定的结构成为记录。它相当于C语言中的struct,Visual Basic中的Type。 记录(record)是一个集合,它把一组相关数据聚集在一个存储单元里,记录中的每个元素称作字段。 记录的声明和简单访问示例: 1 2 3 4 5 6 7 8 9 10 11

crkres9527 1万+

APO的全面进化之路(2):走向IBP、建设端到端供应链计划体系

前一篇记录阐述了在供应链计划(Supply Chain Planning)领域里SAP的关键产品APO的不断进化之路,即部分产品从APO进化到S/4HANA,本篇将继续阐述进化之路上的另一大中坚产品力量SAP-IBP(Integrated Business Planning)。作为SAP数字化供应链(Digital Supply Chain)中供应链计划SCP的左膀右臂,S/4HANA与IBP共同完善了计划域的完整闭环。本篇作为收尾,在先谈对IBP产品的个人认知之前,特别是在当今这个IT产品迭代多、技术革新

ChampaignWolf的专栏 5230

如何在飞腾平台上安装Ubuntu操作系统

注意: 若主板上配置的是NVME硬盘,在进行内核配置时,需要将内核的NEME驱动勾选上,否则移植内核时,无法找到文件系统,进不去操作系统。可以通过rufus软件将镜像做到U盘中,本次使用版本为Rufus 3.9.124 ,其他版本也可以。不要下载live版本的,没有准备网络环境,是一个头疼的事情,笔者暂时没有实现网络安装。将U盘接到主板usb口上,接上串口,显示器,,必需串口有打印才可以安装。可以通过dd命令,将iso安装到U盘。安装的是最小系统,缺少很多命令,需要联网更新,或则更换飞腾专用内核。

技术联盟 2645

【开源工具】F_Record|和画世界一样录制PS的画画过程的插件(亲测好用)

推荐一个比较实用的开源插件!祝画手太太们都原地出道!

shandianchengzi的博客 4543

第十六篇:Camx IFE 、OPE 各 port口功能定义

需要注意的是,类似 CSLTFEPortIdRawDump 是没有downscale功能的,所以如果遇到fov不正确的问题,可以排除下TFE这边的 output port是否被接到了 CSLTFEPortIdRawDump 上面来。我们知道Camx 的IFE 、OPE有不少的output port,各个port是有哪些功能的呢?老一点的框架平台,采用的TEF、OPE。

233

.NET record 使用探讨

.net 里面的record我之前也很少用,最近net6也出来了,看到了一些新特性的内容,其中record引起了我的注意,因为很少使用它,对它比较陌生,看了网上关于它一些知识后,了解到它兼顾了class和struct双重优点,让我很是惊喜。 在编写代码过程中,经常需要创建临时对象,这些对象属性字段不会很多主要作用也只是为了进行逻辑判断的过渡,之前我的做法是创建内部class或者使用Tuple对象,但写内部class代码不够简洁,用Tuple吧代码可读性又很差,现在使用record的话既能让代码更加简洁还能

baidu_39476236的博客 1323

【知识图谱】实践篇——基于知识图谱的《红楼梦》人物关系可视化及问答系统实践:part6基于图谱的问答实现

前序文章:本部分则是整个项目的核心内容——基于图谱的问答。需要实现的是对于“简单问题”进行解析,然后从图谱数据库中查询与该人员及其相关人员信息,返回到前端并显示该人员的基本信息。除此之外,用户可以点击返回的结果人员节点,页面能够显示该用户的个人基本信息。那么现在就开始吧。根据源码实现问答形式,其实是比较简单的。原代码中使用ltp对问题进行分词,选取具有名次词性的关键词进行处理。 ltp配置稍许麻烦,我使用jieba分词工具对问题进行分词,然后再按照原文提取问句中人物及关系,然后构建cypher neo4j查

让算法融入生活,改变生活! 2938

让 SAP HANA 查询飞起来:彻底避开隐式类型转换的性能暗礁

SAP HANA性能优化:警惕隐式类型转换陷阱 隐式类型转换是SAP HANA项目中常见的性能隐患。当SQL表达式两侧数据类型不匹配时,系统会自动进行类型转换,这种看似便利的操作可能导致: 过滤条件无法下推,扫描范围扩大 列存引擎优势丧失,触发中间结果物化 执行计划走向低效路径 治理方案包括: 从源头统一数据类型,确保常用比较字段类型一致 将显式转换应用于常量而非整列 使用生成列预先转换存储,避免运行时计算 排查方法: 通过SQL Plan Cache定位高频查询 分析执行计划中的转换迹象 重点关注VARC

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 11万+

F_Record:让绘画过程录制更高效的Photoshop开源插件

F_Record作为一款轻量级开源工具,是专为Photoshop用户打造的绘画过程录制解决方案。通过自动化捕捉创作轨迹并生成视频文件,帮助创作者完整记录艺术构思到成品的全过程,实现创作历程的可视化分享与教学演示。该工具采用模块化设计,包含CEP扩展面板与Generator插件两部分,提供直观操作界面与后台处理能力的完美结合。本文将详细介绍这款开源工具的安装教程、配置指南及使用技巧,帮助你快速掌握其

gitblog_01163的博客 456

【异常】Coze/扣子 Workflow 调用报 4200 错误深度解析

Coze API 的。

奶爸的编程之路,也就一周冷个三天 301

F#快速入门:用函数式流水线处理销售数据

函数式编程是一种以数据流和不可变性为核心的思想范式,其核心原理在于通过高阶函数、管道操作和模式匹配,将业务逻辑表达为清晰的数据转换过程。相比面向对象的命令式步骤清单,它天然具备线程安全、易测试和低副作用的技术价值。典型应用场景包括数据清洗、ETL管道、领域建模及金融计算等对逻辑准确性与可维护性要求高的工程领域。本文基于F#语言,聚焦真实销售CSV分析任务,通过`List.groupBy`、`|>`管道和`Option`类型等关键热词,演示如何在5分钟环境搭建后,写出比C#少40%行数且编译期防错的生产级脚本

diaoqi6581的博客 388

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

F# ≥ C# (Record)

继续上一篇叙述Tuple和Swap的文章,现在我们继续探索:相比C#编程,如何轻松的使用F#来减少你的编码工作。 直到最近,我才开始注意到在F#中有一个叫做记录(Record)的类型,之前,我以为它类似于C#中的结构或者类,但是,实际并非如此。 首先介绍下什么是记录:记录表示命名值的简单聚合,并可以选择包含成员。 我们先来看如下代码: type myPointRecord = { X ...

weixin_30907523的博客 131

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

F#教程:向函数传入Record类型

前言:最近在了解F#,无意中看到一个日文的教程(http://techbank.jp/Community/blogs/gushwell/default.aspx),觉得很不错,所以希望可以和大家一起分、学习。 我们继续Record的学习。我们试着定义并调用一个传入Vector类型参数的magnify函数:type Vector = { x: int; y: int} let...

weixin_33955681的博客 143

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

F# 入门(十):mutable关键字

F#中的变量的值在声明初始化后就不可以被修改了。 但如果想使用可变的变量时,用mutable关键字修饰变量就可以被修改了。   使用mutable关键字声明变量后,使用 下面我们来看一些例子。 // 定义一个可变整形变量,初始值为1,改变值后为10 > letmutable num = 1;; valmutable num : int = 1 >num;; val it :int

fsharp_net的专栏 935

F#实战入门:23行代码搞定CSV订单分析

F#是一种运行在.NET平台上的实用函数式编程语言,以不可变数据、管道操作符和模式匹配为核心特性,天然适合数据处理任务。其类型推导能力强大,记录类型(Record)让领域建模直观简洁,与C#、Python等语言相比,在解析CSV、清洗日志、聚合API响应等场景中能显著减少胶水代码和运行时错误。本文基于真实订单分析案例,展示如何用声明式数据流替代嵌套循环与临时变量,突出F#在ETL脚本、报表生成、配置校验等低副作用模块中的工程优势,并强调其与.NET生态的无缝互操作性。

a6t2007的博客 496

F#程序设计-函数式编程之Records

当你想把数据组成一个结构化的格式,而不需要太复杂的语法时,你可以使用F#中的Record类型。Record类型与C语言的Struct类型基本一样,存储一组类型的值,通过字段的值来获取。定义一个Record类型很简单,只需要在大括号内定义系列的名称/类型就可以。要实例化一个Record,只需要提供对应的字段以及值即可,剩下的类型推断系统会根据你的输入来自动判断,比如:> type PersonR

AAAA的专栏 839

F#中的接口及实现

Age: int};

henreash的专栏 409

F#个人学习笔记3(F# survey)

1、F#自定义类型,自定义类型可以将我们所需的值打包成一个类型整体,如 Student类型包含{int id ; string name}。F#自定义类型可以通过tuple(元组)或record记录来实现自定义类型。     a、在一些临时的情况下我们可以直接用元组来组合一些值 ,但这仅仅是将值进行组合,不能灵活的访问想要的信息,也没有专有类型名称       将编号和姓名打包成元组由标识符use...

xyxieqing的专栏 166

F# 的血继限界(1)

如我们所见,在F# 的产生和发展过程中,给 C# 引进了很多函数式的革新理念。然而这些革新仍未足以让 C# 进行完全函数式编程。C# 进行函数式编程时存在如下问题: 1、C# 中不能声明“局部不可变量”,不能处理尾递归优化。 很遗憾,不可变量和尾递归,可以说是函数式语言的绝对标识,至于有什么好处就不赘言。而且这两点在C++都支持,把它们放在一起说也就是因为...

weixin_30419799的博客 77

F#基本类型——Records

Records是F#里用来表示简单数据的一种基本数据类型,当你想把数据组成一个结构化的格式,而不需要太复杂的语法时,你可以使用Record类型。 声明Records类型: Records的语法格式如下: [ attributes ] type [accessibility-modifier] typename = { [ mutable ] label1 : t...

weixin_30655569的博客 120

【C#/F#】【函数式编程】第三讲:我们应该如何使用记录这个类型?- 数据与逻辑分离

介绍了如何利用记录的不可变性和其它特性,完成准确的数据建模。增强代码健壮性可读性

scixing的博客 922
上一篇: F# 入门(十二):Tuple(元组)
下一篇: F#与数学(II) – 在图形算法中使用矩阵(PartI)
fsharp_net
博客等级 码龄15年 20粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值