F#学习之路(7) 集合类型

上一篇博客,介绍了列表类型,本篇将介绍数组类型Array、字典类型(Map),以及可变数组(ResizeArray)、Set类型。

一、数组类型 (Array)

数组类型,在语义上表示一组相同类型的集合。这个跟列表(List)相似,两者的区别在于列表类型数据元素不可变,而数组类型可以。虽然数组类型随机访问,在查询访问上性能优先列表,但列表在变更集合(增加、删除集合元素)上有更好的性能。这个跟大多数语言是相似的。

定义数组类型的语法,跟列表也很相似,区别在于数组多了两个"|"符合。

let arr=[|1;2;3|]let jaggedArr=[|                     [|1;2|];                     [|3;4;5|]                    |]

arr为一维数组,类型为int array。jaggedArr数组为int array array

F#数组与c#很相似,有两种类别的数组,一种叫矩形(rectangle)数组,另一种叫锯齿(jagged)数组

矩形数组,在数字意义上,就是矩阵(matrix),一维数组也叫矢量或向量(vector)。注意锯齿数组内嵌的数组长度不相等。

在F#中共定义了三个模块来处理数组类型。Array,Array2,Array3,分别用来处理一维、二维、三维数组。

#light

let a=Array2.create 10 20 0
Array2.iteri (fun i j item-> printfn "no %d,%d :%A" i j item) a

System.Console.ReadKey(true) |>ignore

a类型为int [,],是一个二维数组。

let a=Array2.create 10 20 0a.[5,5]<-8Array2.iteri (fun i j item-> printfn "no %d,%d :%A" i j item) alet arr=[|1;3;4|]printfn "%A" arr.[0..2]

let c=[|        [|1;2|];        [|3;4;5|]       |]printfn "%d" (c.[1].[2])

从上面的代码可以看出,F#除支持与c#类似的访问方法外,还对一维数组支持范围区间访问语法。

二、可变数组类型(ResizeArray)

ResizeArray类型,只是.net 类型 System.Collections.Generic.List泛型类型的别名。ResizeArray长度可变,数据元素可变,很显然这个类型难以保证线程安全,应优先使用F#的List类型。

let b=new ResizeArray<_>()
b.AddRange(seq{for i in 1..100 ->i})
b.[5]<-8
b.ForEach((fun i->printfn "%d" i))

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索数组
, array
, 一维数据
, 类型
, c#锯齿数组
, 一维
, 二维
, 数组类型
, array类型
, 可变
, 随机数组列表
, array数组类型
数组Array类型
fa、fu、fifa online3、cf、f1,以便于您获取更多的相关知识。

时间: 2024-08-02 02:41:35

F#学习之路(7) 集合类型的相关文章

F#学习之路(5) 元组类型

元组类型,表示一组有序数据类型的集合.F#通过支持元组类型,方便了我们定义临时数据结构,而不需要为了临时的数据专门定义一个数据类型. 一.元组的定义: let tuple_2=(1,2) let tuple_3=("F#",1.9,"F# Function Language") 在F#中元组使用小括号,元素之间逗号分隔来定义.元组元素可以是任何类型. 上面代码中,tuple_2的类型是int*int,而tuple_3的类型为string*float*string.元

F#学习之路(6) 列表类型

列表在函数式编程中占据着重要的位置.在Lisp语言中,一切皆是列表,就连函数也是列表,列表在Lisp语言中发挥到了极致.F#语言列表语法来源于Ocaml,与Haskell语言也基本一致.本文只会讲解一些常用的使用方法,要很好的掌握列表,各位朋友可以google一下相关的内容.网络上对列表讨论比较深刻的大多以Haskell语言为例(Lisp语言列表很强大,但与大多数函数式语言列表的区别太大,不好借鉴). 一.如何定义列表 在F#中定义一个列表,有几个方法. 1.使用字量值 let l=[1;2;3

F#学习之路(4) 基本类型

F#基本类型包括整型.浮点型.布尔型(bool).字符型(char).字符串型(string),还有元组类型(tuple).列表类型(list).数组类型(array),序列类型(seq).另外,还允许我们定义记录类型(record type).联合类型(union type).活动模式等.当然,F#作为一种多范式的编程语言,支持所有的OO编程语法,允许我们定义类.接口.委托.结构等,本篇文章只介绍基本类型,其它类型在后续的文章中一一介绍. 上面这张图,比较的详细的介绍了F#的基本类型.左边一列

F#学习之路(2) 深刻理解函数(上)

函数在函数式编程语言中是一等公民,是函数式语言中最重要的基本组成元素,也是其名称的由来. F# 中的函数之如C#中的类,是组织程序结构的最基本单元.是命令式编程语言中函数或OO编程语言中方法的超集.超集,有多强大?我将在下面几个方面细细道来. F#是一种多范式的编程语言.支持命令式.函数式.面向对象的编程范式,还有目前火热的面向语言编程(DSL).本文不会介绍其他的编程范式,只介绍函数式编程范式. 在面向对象编程的世界里,视命令式或过程式是一种丑陋的编程方式,至少被大多数程序员视为不能有效发挥O

F#学习之路(2) 深刻理解函数(下)

3.函数作用域 在F#中组织程序结构的方法有以下几种,使用类型 (type)来支持自定义数据类型,使用名称空间(namespace)来确保类型唯一,模块(module)则用来封装某一数据类型及其操作,而函数则封装了行为或业务逻辑.本文只简单介绍模块(module),其他内容将在下一主题中讨论. 函数是函数式语言中最基本的组成,是应用程序中具体业务逻辑的实现者,弄清其作用域非常必要. 在F#语言中,每一个源代码文件(本文仅指以.fs为扩展名的文件),其默认有一个以文件名首字母大写的模块名(modu

F#学习之路(1)什么是函数式编程

对于什么是函数式编程,这个是人云亦云.本文并不打算对此进行定义,而是希望与园子里的朋友们共同探讨这个话题,抛砖只为引玉. 1.维基百科给出的定义是: 函数式编程是种编程范式,它将电脑运算视为函数的计算.函数编程语言最重要的基础是λ 演算(lambda calculus). 而且λ演算的函数可以接受函数当作输入(参数)和输出(返回值). 2.函数应该是高阶函数,可柯里化 从维基百科定义可以看出,大家对函数式编程语言中,函数是一等公民(first class)这个概念是没有异议的. 函数应该享受值的

Swift中内置的集合类型学习笔记_Swift

一.引言 Swift中提供了3种集合类型,Array数据类型,Set集合类型,Dictionary字典类型.Array用于存放一组有序的数据,数据角标从0开始一次递增:Set用于存放一组无序的数据,数据不可以重复:Dictionary也用于存放一组无序的数据,只是其是按照键值对的方式存储,键值必须唯一.这里借用官方文档中的一张图来表示3种集合类型的特点: 二.Array类型 Array通常也被称为数组,Swift是一种类型安全语言,其中的Array类型也必须确定其元素的类型,声明数组类型有两种方

《Redis入门指南(第2版)》一3.6 有序集合类型

3.6 有序集合类型 了解了集合类型后,小白终于被Redis的强大功能所折服了,但他却不愿止步于此.这不,小白又想给博客加上按照文章访问量排序的功能: 老师您好,之前您已经介绍过了如何使用列表类型键存储文章ID列表,不过我还想加上按照文章访问量排序的功能,因为我觉得很多访客更希望看那些热门的文章. 宋老师回答到: 这个功能很好实现,不过要用到一个新的数据类型,也是我要介绍的最后一个数据类型-有序集合. 3.6.1 介绍 有序集合类型(sorted set)的特点从它的名字中就可以猜到,它与上一节

Redis有序集合类型的常用命令小结_Redis

一.有序集合类型 有序集合类型,大家从名字上应该就可以知道,实际上就是在集合类型上加了个有序而已.Redis中的有序集合类型,实际上是在集合类型上,为每个元素都关联一个分数,有序实际上说的是分数有序,我们根据分数的范围获取集合及其他操作.集合的元素依然是不能够相同的,但是分数可以相同. 下面列举有序集合和类型和列表类型的相似处:       ①两者都是有序的(废话!)       ②两者都可以获得某一范围的元素 下面列举区别:       ①列表是链表实现的,靠近两边的数据读取极快,而元素过多后