F# - 可变列表


List <'T>类表示可以通过索引访问的强类型对象列表。

它是 List 类的可变对应项。它与数组类似,因为它可以通过索引访问,但与数组不同的是,列表可以调整大小。因此,您无需在声明时指定尺寸。

创建可变列表

列表是使用new关键字并调用列表的构造函数创建的。以下示例演示了这一点 -

(* Creating a List *)
open System.Collections.Generic

let booksList = new List<string>()
booksList.Add("Gone with the Wind")
booksList.Add("Atlas Shrugged")
booksList.Add("Fountainhead")
booksList.Add("Thornbirds")
booksList.Add("Rebecca")
booksList.Add("Narnia")

booksList |> Seq.iteri (fun index item -> printfn "%i: %s" index booksList.[index])

当您编译并执行该程序时,它会产生以下输出 -

0: Gone with the Wind
1: Atlas Shrugged
2: Fountainhead
3: Thornbirds
4: Rebecca
5: Narnia

列表(T)类

List(T) 类表示可以通过索引访问的强类型对象列表。它提供了搜索、排序和操作列表的方法。

下表提供了 List(T) 类的属性、构造函数和方法 -

特性

财产 描述
容量 获取或设置内部数据结构在不调整大小的情况下可以容纳的元素总数。
数数 获取List(T)中包含的元素数量。
物品 获取或设置指定索引处的元素。

构造函数

构造函数 描述
列表(T)() 初始化 List(T) 类的一个新实例,该实例为空且具有默认初始容量。
列表(T)(IEnumerable(T)) 初始化 List(T) 类的新实例,该实例包含从指定集合复制的元素,并具有足够的容量来容纳复制的元素数量。
列表(T)(Int32) 初始化 List(T) 类的一个新实例,该实例为空且具有指定的初始容量。

方法

方法 描述
添加 将一个对象添加到 List(T) 的末尾。
添加范围 将指定集合的​​元素添加到 List(T) 的末尾。
作为只读 返回当前集合的只读 IList(T) 包装器。
二分查找(​​T) 使用默认比较器在整个排序 List(T) 中搜索元素,并返回该元素从零开始的索引。
二分查找(​​T, IComparer(T)) 使用指定的比较器在整个排序 List(T) 中搜索元素,并返回该元素的从零开始的索引。
二分查找(​​Int32, Int32, T, IComparer(T)) 使用指定的比较器在已排序 List(T) 的一系列元素中搜索元素,并返回该元素的从零开始的索引。
清除 从 List(T) 中删除所有元素。
包含 确定某个元素是否在 List(T) 中。
全部转换(T 输出) 将当前List(T)中的元素转换为另一种类型,并返回包含转换后的元素的列表。
复制到(T[]) 从目标数组的开头开始,将整个 List(T) 复制到兼容的一维数组。
复制到 (T[], Int32) 从目标数组的指定索引开始,将整个 List(T) 复制到兼容的一维数组。
复制到(Int32,T [],Int32,Int32) 从目标数组的指定索引开始,将 List(T) 中的一系列元素复制到兼容的一维数组。
等于(对象) 确定指定对象是否等于当前对象。(继承自对象。)
存在 确定 List(T) 是否包含与指定谓词定义的条件匹配的元素。
最终确定 允许对象在被垃圾收集回收之前尝试释放资源并执行其他清理操作(继承自 Object)。
寻找 搜索与指定谓词定义的条件相匹配的元素,并返回整个 List(T) 中第一个出现的元素。
找到所有 检索与指定谓词定义的条件匹配的所有元素。
查找索引(谓词(T)) 搜索与指定谓词定义的条件匹配的元素,并返回整个 List(T) 中第一次出现的从零开始的索引。
FindIndex(Int32, 谓词(T)) 搜索与指定谓词定义的条件匹配的元素,并返回 List(T) 中从指定索引延伸到最后一个元素的元素范围内第一个匹配项的从零开始的索引。
FindIndex(Int32, Int32, 谓词(T)) 搜索与指定谓词定义的条件匹配的元素,并返回 List(T) 中从指定索引开始并包含指定数量元素的元素范围内第一次出现的从零开始的索引。
查找最后一个 搜索与指定谓词定义的条件相匹配的元素,并返回整个 List(T) 中最后一次出现的元素。
查找最后一个索引(谓词(T)) 搜索与指定谓词定义的条件相匹配的元素,并返回整个 List(T) 中最后一次出现的从零开始的索引。
FindLastIndex(Int32, 谓词(T)) 搜索与指定谓词定义的条件匹配的元素,并返回 List(T) 中从第一个元素延伸到指定索引的元素范围内最后一次出现的从零开始的索引。
FindLastIndex(Int32, Int32, 谓词(T)) 搜索与指定谓词定义的条件匹配的元素,并返回 List(T) 中包含指定数量的元素并以指定索引结束的元素范围内最后一次出现的从零开始的索引。
对于每个 对 List(T) 的每个元素执行指定的操作。
获取枚举器 返回一个循环访问 List(T) 的枚举器。
获取哈希码 用作默认的哈希函数。(继承自对象。)
获取距离 创建源 List(T) 中一系列元素的浅表副本。
获取类型 获取当前实例的类型。(继承自对象。)
索引(T) 搜索指定对象并返回整个 List(T) 中第一次出现的从零开始的索引。
IndexOf(T, Int32) 搜索指定对象并返回 List(T) 中从指定索引延伸到最后一个元素的元素范围内第一个匹配项的从零开始的索引。
IndexOf(T, Int32, Int32) 搜索指定对象并返回 List(T) 中从指定索引开始并包含指定数量元素的元素范围内第一个匹配项的从零开始的索引。
插入 将一个元素插入到 List(T) 的指定索引处。
插入范围 将集合的元素插入到 List(T) 的指定索引处。
最后索引(T) 搜索指定对象并返回整个 List(T) 中最后一次出现的从零开始的索引。
最后索引(T,Int32) 搜索指定对象并返回 List(T) 中从第一个元素延伸到指定索引的元素范围内最后一个匹配项的从零开始的索引。
LastIndexOf(T, Int32, Int32) 搜索指定对象并返回 List(T) 中包含指定数量的元素并以指定索引结束的元素范围内最后一次出现的从零开始的索引。
会员克隆 创建当前对象的浅表副本。(继承自对象。)
消除 从 List(T) 中删除第一次出现的特定对象。
移除所有 删除与指定谓词定义的条件匹配的所有元素。
删除于 删除 List(T) 指定索引处的元素。
删除范围 从 List(T) 中删除一系列元素。
撤销() 反转整个 List(T) 中元素的顺序。
反转(Int32,Int32) 反转指定范围内元素的顺序。
种类() 使用默认比较器对整个 List(T) 中的元素进行排序。
排序(比较(T)) 使用指定的 System 对整个 List(T) 中的元素进行排序。比较(T)。
排序(IComparer(T)) 使用指定的比较器对整个 List(T) 中的元素进行排序。
排序(Int32,Int32,IComparer(T)) 使用指定的比较器对 List(T) 中一系列元素中的元素进行排序。
数组 将 List(T) 的元素复制到新数组。
转字符串 返回表示当前对象的字符串。(继承自对象。)
修剪多余的部分 如果 List(T) 中元素的实际数量小于阈值,则将容量设置为该数量。
真为所有人 确定 List(T) 中的每个元素是否与指定谓词定义的条件匹配。

例子

(* Creating a List *)
open System.Collections.Generic

let booksList = new List<string>()
booksList.Add("Gone with the Wind")
booksList.Add("Atlas Shrugged")
booksList.Add("Fountainhead")
booksList.Add("Thornbirds")
booksList.Add("Rebecca")
booksList.Add("Narnia")

printfn"Total %d books" booksList.Count
booksList |> Seq.iteri (fun index item -> printfn "%i: %s" index booksList.[index])
booksList.Insert(2, "Roots")

printfn("after inserting at index 2")
printfn"Total %d books" booksList.Count

booksList |> Seq.iteri (fun index item -> printfn "%i: %s" index booksList.[index])
booksList.RemoveAt(3)

printfn("after removing from index 3")
printfn"Total %d books" booksList.Count

booksList |> Seq.iteri (fun index item -> printfn "%i: %s" index booksList.[index])

当您编译并执行该程序时,它会产生以下输出 -

Total 6 books
0: Gone with the Wind
1: Atlas Shrugged
2: Fountainhead
3: Thornbirds
4: Rebecca
5: Narnia
after inserting at index 2
Total 7 books
0: Gone with the Wind
1: Atlas Shrugged
2: Roots
3: Fountainhead
4: Thornbirds
5: Rebecca
6: Narnia
after removing from index 3
Total 6 books
0: Gone with the Wind
1: Atlas Shrugged
2: Roots
3: Thornbirds
4: Rebecca
5: Narnia