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

List(T) 类

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

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

属性

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

构造函数

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

Method

方法 描述
Add 将一个对象添加到List(T)的末尾。
AddRange 将指定集合的元素添加到List(T)的末尾。
AsReadOnly 返回当前集合的只读 IList(T) 包装器。
BinarySearch(T) 使用默认比较器在整个排序 List(T) 中搜索元素,并返回该元素从零开始的索引。
BinarySearch(T, IComparer(T)) 使用指定的比较器在整个排序的 List(T) 中搜索元素,并返回该元素从零开始的索引。
BinarySearch(Int32, Int32, T, IComparer(T)) 使用指定的比较器在已排序的 List(T) 的一系列元素中搜索元素,并返回该元素的从零开始的索引。
Clear 从 List(T) 中删除所有元素。
Contains 判断一个元素是否在List(T)中。
ConvertAll(TOutput) 将当前List(T)中的元素转换为另一种类型,并返回包含转换后的元素的列表。
CopyTo(T[]) 从目标数组的开头开始将整个 List(T) 复制到兼容的一维数组。
CopyTo(T[], Int32) 从目标数组的指定索引处开始,将整个 List(T) 复制到兼容的一维数组。
CopyTo(Int32, T[], Int32, Int32) 从目标数组的指定索引开始,将 List(T) 中的一系列元素复制到兼容的一维数组。
Equals(Object) 确定指定对象是否等于当前对象。 (继承自Object。)
Exists 确定List(T)是否包含与指定谓词定义的条件匹配的元素。
Finalize 允许对象在被垃圾收集回收之前尝试释放资源并执行其他清理操作(继承自 Object)。
Find 搜索与指定谓词定义的条件匹配的元素,并返回整个 List(T) 中的第一个匹配项。
FindAll 检索与指定谓词定义的条件匹配的所有元素。
FindIndex(Predicate(T)) 搜索与指定谓词定义的条件匹配的元素,并返回整个 List(T) 中第一次出现的从零开始的索引。
FindIndex(Int32, Predicate(T)) 搜索与指定谓词定义的条件相匹配的元素,并返回 List(T) 中从指定索引延伸到最后一个元素的元素范围内第一次出现的从零开始的索引。
FindIndex(Int32, Int32, Predicate(T)) 搜索与指定谓词定义的条件相匹配的元素,并返回 List(T) 中从指定索引开始并包含指定数量元素的元素范围内第一次出现的从零开始的索引。
FindLast 搜索与指定谓词定义的条件相匹配的元素,并返回整个 List(T) 中最后一次出现的元素。
FindLastIndex(Predicate(T)) 搜索与指定谓词定义的条件匹配的元素,并返回整个 List(T) 中最后一次出现的从零开始的索引。
FindLastIndex(Int32, Predicate(T)) 搜索与指定谓词定义的条件匹配的元素,并返回 List(T) 中从第一个元素延伸到指定索引的元素范围内最后一个匹配项的从零开始的索引。
FindLastIndex(Int32, Int32, Predicate(T)) 搜索与指定谓词定义的条件相匹配的元素,并返回 List(T) 中包含指定数量的元素并以指定索引结束的元素范围内最后一次出现的从零开始的索引。
ForEach 对List(T)的每个元素执行指定的操作。
GetEnumerator 返回一个遍历 List(T) 的枚举器。
GetHashCode 用作默认哈希函数。(继承自Object。)
GetRange 创建源 List(T) 中一系列元素的浅表副本。
GetType 获取当前实例的类型。 (继承自Object。)
IndexOf(T) 搜索指定对象并返回整个 List(T) 中第一次出现的从零开始的索引。
IndexOf(T, Int32) 搜索指定对象并返回 List(T) 中从指定索引延伸到最后一个元素的元素范围内第一个匹配项的从零开始的索引。
IndexOf(T, Int32, Int32) 搜索指定对象并返回 List(T) 中从指定索引开始并包含指定数量元素的元素范围内第一个匹配项的从零开始的索引。
Insert 将一个元素插入到 List(T) 的指定索引处。
InsertRange 将集合的元素插入到 List(T) 的指定索引处。
LastIndexOf(T) 搜索指定对象并返回整个 List(T) 中最后一次出现的从零开始的索引。
LastIndexOf(T, Int32) 搜索指定对象并返回 List(T) 中从第一个元素延伸到指定索引的元素范围内最后一次出现的从零开始的索引。
LastIndexOf(T, Int32, Int32) 搜索指定对象并返回 List(T) 中包含指定数量的元素并以指定索引结束的元素范围内最后一次出现的从零开始的索引。
MemberwiseClone 创建当前对象的浅表副本。 (继承自Object。)
Remove 从 List(T) 中删除第一次出现的特定对象。
RemoveAll 删除与指定谓词定义的条件匹配的所有元素。
RemoveAt 删除List(T)指定索引处的元素。
RemoveRange 从 List(T) 中删除一系列元素。
Reverse() 反转整个List(T)中元素的顺序。
Reverse(Int32, Int32) 反转指定范围内元素的顺序。
Sort() 使用默认比较器对整个 List(T) 中的元素进行排序。
Sort(Comparison(T)) 使用指定的 System 对整个 List(T) 中的元素进行排序。 比较(T).
Sort(IComparer(T)) 使用指定的比较器对整个 List(T) 中的元素进行排序。
Sort(Int32, Int32, IComparer(T)) 使用指定的比较器对 List(T) 中一系列元素中的元素进行排序。
ToArray 将 List(T) 的元素复制到新数组。
ToString 返回表示当前对象的字符串。 (继承自Object。)
TrimExcess 如果 List(T) 中元素的实际数量小于阈值,则将容量设置为该数量。
TrueForAll 确定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