当前位置: 首页 > 文档资料 > F# 中文教程 >

F# - 可变列表( Mutable Lists)

优质
小牛编辑
126浏览
2023-12-01

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

The List(T) Class

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

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

属性 (Properties)

属性描述
Capacity获取或设置内部数据结构可以保留的元素总数,而无需调整大小。
Count获取List(T)中包含的元素数。
Item获取或设置指定索引处的元素。

构造函数 (Constructors)

构造函数描述
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)使用默认比较器在整个排序列表(T)中搜索元素,并返回元素的从零开始的索引。
BinarySearch(T, IComparer(T))使用指定的比较器在整个排序列表(T)中搜索元素,并返回元素的从零开始的索引。
BinarySearch(Int32, Int32, T, IComparer(T))使用指定的比较器搜索元素的排序列表(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在源列表(T)中创建一系列元素的浅表副本。
GetType获取当前实例的Type。 (继承自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的浅表副本。 (继承自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)中的每个元素是否与指定谓词定义的条件匹配。

例子 (Example)

(* 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