F# 集合类型

通过查看本主题,您可以确定哪个F#集合类型最适合于特定需求。 这些集合类型与集合不同输入.NET Framework,如 System.Collections.Generic 命名空间,因为F#集合类型从一个函数编程方面设计而不是一个面向对象的角度。 具体而言,仅数组集合可变元素。 因此,那么,当您修改集合时,可创建修改集合的实例而不是修改原始集合。

集合类型中的数据结构的类型也是不同的对象存储。 哈希表之类的数据结构,连接表,并且,数组具有不同的性能特征和其他设置可用的操作。

F#集合类型

下表显示了F#集合类型。

类型

说明

相关链接

列表

相同类型的元素进行排序的,不可变的同。 实现,连接表。

列表 (F#)

列出模块

数组

是所有相同类型的连续数据的固定大小,从零开始的,可变集合。

数组 (F#)

数组模块

Array2D模块

Array3D模块

seq

是任何一个类型元素的逻辑序列。 顺序特别有用,则用时,的有序数据集合,但并不需要使用所有元素。 各个序列元素仅根据需要计算,因此,序列更好地列表上执行,如果不是使用所有元素。 序列由seq<'T>类型表示,是IEnumerable的<T>别名。 因此,可以将实现 IEnumerable 的任何 .NET Framework 类型用作序列。

序列 (F#)

序列模块

映射

元素一个不可变的字典。 元素由键访问。

映射模块

Set

根据二叉树设置的不可变,比较是F#结构比较函数,可能会使用 IComparable 接口实现在键值的。

设置模块

功能表

本节比较可在F#集合类型的函数。 给定函数的计算复杂性,其中N是第一个集合的大小,并且,M是第二个集合的大小,因此,如果有的话)。 短划线(-)指示此功能不可用的集合中。 由于顺序延迟计算,一个功能(如Seq.distinct能为O (1),因为它立即返回,不过,它仍将影响序列的性能,在枚举。

功能

数组

列表

Sequence

映射

Set

说明

append

O (M)

O (N)

O (N)

-

-

返回包含第二个集合中的元素之后的第一个集合中的元素的新集合。

添加

-

-

-

O (log N)

O (log N)

返回添加了元素的新集合。

average

O (N)

O (N)

O (N)

-

-

返回元素的平均值集合中的。

averageBy

O (N)

O (N)

O (N)

-

-

返回所提供的函数的结果的平均值将应用于每个元素。

blit

O (N)

-

-

-

-

复制数组的一部分。

cache

-

-

O (N)

-

-

计算和存储序列的元素。

cast

-

-

O (N)

-

-

将元素转换为指定的类型。

choose

O (N)

O (N)

O (N)

-

-

将给定函数f 应用于列表的每个元素 x。 返回包含每个元素的结果函数返回 Some(f(x))的列表。

collect

O (N)

O (N)

O (N)

-

-

将给定函数应用于集合的每个元素,连接所有结果,并返回组合列表。

compareWith

-

-

O (N)

-

-

使用给定的比较函数,比较两个序列,由元素的元素。

concat

O (N)

O (N)

O (N)

-

-

将给定的枚举集合的枚举组合为单个串联的枚举。

contains

-

-

-

-

O (log N)

如果集合包含指定的元素,则返回true。

containsKey

-

-

-

O (log N)

-

测试组件是否中的字段映射。

count

-

-

-

-

O (N)

返回集合中元素的数目。

countBy

-

-

O (N)

-

-

将键生成函数应用于序列的每个元素,并返回给定唯一键及其出现的数字在原始序列的顺序。

copy

O (N)

-

O (N)

-

-

复制集合。

create

O (N)

-

-

-

-

创建最初均为给定值的数组整个元素。

delay

-

-

O (1)

-

-

返回序列的给定延迟规范中生成的序列。

difference

-

-

-

-

O (log N) M *

返回新设置与设置元素的第二个从第一个集合中移除。

distinct

O (1)*

根据泛型哈希和项的相等性比较,返回不包含重复项的序列。 如果某个元素在序列中多次,则丢弃最新匹配项。

distinctBy

O (1)*

返回不包含基于键的泛型哈希和相等比较重复项给定键生成函数返回的序列。 如果某个元素在序列中多次,则丢弃最新匹配项。

empty

O (1)

O (1)

O (1)

O (1)

O (1)

创建空的集合。

exists

O (N)

O (N)

O (N)

O (log N)

O (log N)

测试序列的所有元素是否都满足给定谓词。

exists2

O (分钟(N,M)

-

O (分钟(N,M)

测试是否对输入序列的对应元素满足给定谓词。

fill

O (N)

设置数组的元素的大小为给定值。

filter

O (N)

O (N)

O (N)

O (N)

O (N)

返回集合中仅包含给定谓词为其返回 true的新集合。

find

O (N)

O (N)

O (N)

O (log N)

-

返回给定函数为其返回 true 的第一个元素。 如果不存在这样的元素,则返回 KeyNotFoundException

findIndex

O (N)

O (N)

O (N)

-

-

返回满足给定谓词的数组中第一个元素的索引。 如果某元素不再满足谓词,则引发 KeyNotFoundException

findKey

-

-

-

O (log N)

-

计算在针对集合中的每个映射的功能,并返回第一个映射的键函数返回 true的位置。 如果不存在此类元素,则该函数引发 KeyNotFoundException

fold

O (N)

O (N)

O (N)

O (N)

O (N)

将函数应用于集合的每个元素,并在整个计算过程中使用一个累加器参数。 如果输入函数为f,并且元素为i0…,此函数求值f (… (f的i0)…)在。

fold2

O (N)

O (N)

-

-

-

将函数应用于两个集合的对应元素,并在整个计算过程中使用一个累加器参数。 集合必须具有相同的大小。 如果输入函数为f,并且元素为i0…和j0…jn,此函数求值f (… (f s i0 j0)...) iN jN。

foldBack

O (N)

O (N)

-

O (N)

O (N)

将函数应用于集合的每个元素,并在整个计算过程中使用一个累加器参数。 如果输入函数为f,并且元素为i0…,此函数求值f i0 (… (在中的f)。

foldBack2

O (N)

O (N)

-

-

-

将函数应用于两个集合的对应元素,并在整个计算过程中使用一个累加器参数。 集合必须具有相同的大小。 如果输入函数为f,并且元素为i0…和j0…jn,此函数求值f i0 j0 (… (在jN属于)的f)。

forall

O (N)

O (N)

O (N)

O (N)

O (N)

测试集合的所有元素是否都满足给定谓词。

forall2

O (N)

O (N)

O (N)

-

-

测试集合的所有对应元素是否成对地满足给定谓词。

获取/第n

O (1)

O (N)

O (N)

-

-

返回从给定集合中的元素索引。

head

-

O (1)

O (1)

-

-

返回集合中的第一个元素。

init

O (N)

O (N)

O (1)

-

-

为给定创建集合维度和计算元素的生成器函数。

initInfinite

-

-

O (1)

-

-

生成,因此,当进行迭代时,通过调用给定函数来返回连续的元素的序列。

intersect

-

-

-

-

O (log N *记录M)

计算交集两组。

intersectMany

-

-

-

-

O (N1 * N2…)

计算集合序列的交集。 序列不能为空。

isEmpty

O (1)

O (1)

O (1)

O (1)

-

如果集合为空,则返回 true。

isProperSubset

-

-

-

-

O (log N) M *

返回 true,如果第一个集合的所有元素均在第二个设置,因此,设置的至少一个元素中的第二个不先设置的。

isProperSuperset

-

-

-

-

O (log N) M *

返回 true,如果集合的所有元素的第二个在第一个集合,因此,第一个集合中至少有一个元素不在第二个集内。

isSubset

-

-

-

-

O (log N) M *

如果第一个集合的所有元素均在设置,的第一个集合返回 true。

isSuperset

-

-

-

-

O (log N) M *

如果集合的所有元素的第二个在第一个集合,则返回 true。

iter

O (N)

O (N)

O (N)

O (N)

O (N)

将给定函数应用于集合的每个元素。

iteri

O (N)

O (N)

O (N)

-

-

将给定函数应用于集合的每个元素。 传递到函数的整数指示元素的索引。

iteri2

O (N)

O (N)

-

-

-

将给定函数应用于从两个数组中的匹配索引处提取的元素对。 传递到函数的整数指示元素的索引。 两个数组必须具有相同的长度。

iter2

O (N)

O (N)

O (N)

-

-

将给定函数应用于从两个数组中的匹配索引处提取的元素对。 两个数组必须具有相同的长度。

length

O (1)

O (N)

O (N)

-

-

返回元素数集合中的。

map

O (N)

O (N)

O (1)

-

-

生成其元素是将给定函数应用于数组的每个元素的集合。

map2

O (N)

O (N)

O (1)

-

-

生成元素是成对地应用给定函数应用于两个集合的对应元素的集合。 两个输入数组必须具有相同的长度。

map3

-

O (N)

-

-

-

生成元素是同时应用给定函数应用于三个集合的对应元素的集合。

mapi

O (N)

O (N)

O (N)

-

-

生成其元素是将给定函数应用于数组的每个元素的数组。 传递到函数的整数索引指示所转换元素的索引。

mapi2

O (N)

O (N)

-

-

-

生成元素是成对地应用给定函数应用于两个集合的对应元素的集合,同时传递元素的索引。 两个输入数组必须具有相同的长度。

max

O (N)

O (N)

O (N)

-

-

返回集合中的最大元,比较使用 最大 运算符。

maxBy

O (N)

O (N)

O (N)

-

-

返回集合中的最大元,比较通过对函数结果的 最大

maxElement

-

-

-

-

O (log N)

返回基于排序设置最大元该设置了的使用。

min

O (N)

O (N)

O (N)

-

-

返回集合中的最小元,比较使用 分钟 运算符。

minBy

O (N)

O (N)

O (N)

-

-

返回集合中的最小元,比较使用函数结果的 分钟 运算符。

minElement

-

-

-

-

O (log N)

返回基于排序设置的最小组件。提供设置的使用。

ofArray

-

O (N)

O (1)

O (N)

O (N)

创建包含元素和给定数组相同的集合。

ofList

O (N)

-

O (1)

O (N)

O (N)

创建包含元素与给定列表的集合。

ofSeq

O (N)

O (N)

-

O (N)

O (N)

创建包含元素和给定的顺序相同的集合。

pairwise

-

-

O (N)

-

-

返回每个元素及其前置序列在输入序列中除第一个元素,只返回作为第二个元素的前置。

Partition — 分区

O (N)

O (N)

-

O (N)

O (N)

集合拆分成两个集合。 第一个集合包含给定谓词为其返回 true的元素,因此,第二个集合包含给定谓词为其返回 false的元素。

permute

O (N)

O (N)

-

-

-

返回一个数组,其中包含依据指定排列规则进行排列的所有元素。

pick

O (N)

O (N)

O (N)

O (log N)

-

将给定函数应用于连续的元素,并返回该函数返回数组的第一个结果。 如果该函数从不返回数组,KeyNotFoundException 引发。

readonly

-

-

O (N)

-

-

创建委托给特定顺序的对象序列对象。 此操作确保类型转换不能再次查看和更改原始顺序。 例如,在中,如果给定数组,则返回的序列将返回数组的元素,但是,您无法转换为数组的返回的序列对象。

reduce

O (N)

O (N)

O (N)

-

-

将函数应用于集合的每个元素,并在整个计算过程中使用一个累加器参数。 此功能通过将函数开始的前两个元素,通过此结果赋给函数的第三个元素时,依此类推。 返回最终结果的函数。

reduceBack

O (N)

O (N)

-

-

-

将函数应用于集合的每个元素,并在整个计算过程中使用一个累加器参数。 如果输入函数为f,并且元素为i0…,此函数求值f i0 (… (1的f)。

remove

-

-

-

O (log N)

O (log N)

从映射的域中移除元素。 如果元素不存在,则不引发异常。

replicate

-

O (N)

-

-

-

创建具有指定长度的列表并且将每个元素设置为给定值。

rev

O (N)

O (N)

-

-

-

返回元素顺序相反的新列表。

scan

O (N)

O (N)

O (N)

-

-

将函数应用于集合的每个元素,并在整个计算过程中使用一个累加器参数。 此操作应用函数应用于第二个参数和列表的第一个元素。 操作然后将此结果赋给函数与第二个元素等一起注入 最后,操作返回中间结果和最终结果的列表。

scanBack

O (N)

O (N)

-

-

-

类似于foldback的操作,但会返回中间结果和最终结果。

singleton

-

-

O (1)

-

O (1)

返回只允许一个项的序列。

set

O (1)

-

-

-

-

设置数组的元素设置为指定值。

skip

-

-

O (N)

-

-

返回一个序列,该序列跳过基础序列的 N 个元素,然后生成序列的其余元素。

skipWhile

-

-

O (N)

-

-

返回,因此,当进行迭代时,跳过基础序列的元素序列,当给定谓词为其返回 true 然后为该序列中的其余元素。

sort

O (N log N)平均值

O (N^2)最糟糕的情况

O (N log N)

O (N log N)

-

-

由元素值排序集合。 使用 比较,元素进行比较。

sortBy

O (N log N)平均值

O (N^2)最糟糕的情况

O (N log N)

O (N log N)

-

-

给定列表进行排序使用给定的投影提供的键。 使用 比较,对键进行比较。

sortInPlace

O (N log N)平均值

O (N^2)最糟糕的情况

-

-

-

-

通过就地更改并使用给定的比较函数对数组的元素。 使用 比较,元素进行比较。

sortInPlaceBy

O (N log N)平均值

O (N^2)最糟糕的情况

-

-

-

-

通过就地更改并使用给定的投影对数组元素的键的。 使用 比较,元素进行比较。

sortInPlaceWith

O (N log N)平均值

O (N^2)最糟糕的情况

-

-

-

-

通过就地更改并使用给定的比较函数对数组的元素作为该顺序。

sortWith

O (N log N)平均值

O (N^2)最糟糕的情况

O (N log N)

-

-

-

排序集合的元素,使用给定的比较函数作为该命令并返回新集合。

sub

O (N)

-

-

-

-

生成包含给定的子范围以索引和长度指定的数组。

sum

O (N)

O (N)

O (N)

-

-

返回元素的总和集合中的。

sumBy

O (N)

O (N)

O (N)

-

-

返回通过将函数生成于集合的每个元素的结果的总和。

tail

-

O (1)

-

-

-

返回列表,而无需其第一个元素。

take

-

-

O (N)

-

-

返回多达指定计数的序列元素。

takeWhile

-

-

O (1)

-

-

返回,因此,当进行迭代时,不会基础序列的元素序列,当给定谓词为其返回然后返回任何元素的 true 时。

toArray

-

O (N)

O (N)

O (N)

O (N)

从给定集合中创建数组。

toList

O (N)

-

O (N)

O (N)

O (N)

根据给定的集合创建列表。

toSeq

O (1)

O (1)

-

O (1)

O (1)

创建从给定集合的序列。

truncate

-

-

O (1)

-

-

返回,那么,当枚举,不超过N组件返回的序列。

tryFind

O (N)

O (N)

O (N)

O (log N)

-

搜索满足给定谓词的元素。

tryFindIndex

O (N)

O (N)

O (N)

-

-

搜索满足给定谓词并返回匹配的元素的索引的第一个元素,或 None,如果不存在这样的元素。

tryFindKey

-

-

-

O (log N)

-

返回满足给定谓词的集合中的第一个映射的索引,或返回 None(如果没有此类元素存在)。

tryPick

O (N)

O (N)

O (N)

O (log N)

-

将给定函数应用于连续的元素,并返回该函数返回某个值的 Some 的第一个结果。 如果不存在这样的元素,操作返回 None。

unfold

-

-

O (N)

-

-

返回包含特定元素计算生成的序列。

union

-

-

-

-

O (log N) M *

计算两个集合的并集。

unionMany

-

-

-

-

O (N1 * N2…)

计算集合序列的并集。

unzip

O (N)

O (N)

O (N)

-

-

将一个配对列表拆分成两个列表。

unzip3

O (N)

O (N)

O (N)

-

-

将三元组列表拆分成三个列表。

windowed

-

-

O (N)

-

-

返回给定可调整窗口包含元素从输入序列中提取的序列。 每个窗口都以新数组的形式返回。

zip

O (N)

O (N)

O (N)

-

-

将两个集合对列表。 两个列表的长度必须相等。

zip3

O (N)

O (N)

O (N)

-

-

将三个集合三个为一组的列表。 列表的长度必须相等。

请参见

其他资源

F# 类型

F# 语言参考